Как скрыть Soft Keyboard, когда начинается активность


151

У меня есть Edittext с android:windowSoftInputMode="stateVisible"Манифестом. Теперь клавиатура будет показана, когда я начну деятельность. Как это скрыть? Я не могу использовать, android:windowSoftInputMode="stateHiddenпотому что когда клавиатура видна, сверните приложение и возобновите его, клавиатура должна быть видна. Я пробовал с

InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

но это не сработало.

Ответы:


1

Если вы не хотите использовать xml, создайте расширение Kotlin, чтобы скрыть клавиатуру

// In onResume, call this
myView.hideKeyboard()

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

Альтернативы в зависимости от варианта использования:

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Calls Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

Как показать мягкую клавиатуру

fun Context.showKeyboard() { // Or View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

Более простой метод при одновременном запросе фокуса на тексте редактирования

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

Упрощение бонусов:

Убрать требование навсегда используя getSystemService: Splitties Library

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)

361

В AndroidManifest.xml:

<activity android:name="com.your.package.ActivityName"
          android:windowSoftInputMode="stateHidden"  />

или попробуйте

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)‌​;

Пожалуйста, проверьте это также


3
Спасибо за android:windowSoftInputMode="stateHidden"
Шилендра Мадда

2
На самом деле, есть и отличный ответ о том, как не фокусироваться на редактируемом тексте stackoverflow.com/questions/4668210/…
Борис Треухов

204

Используйте следующие функции, чтобы показать / скрыть клавиатуру:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}

4
Context.INPUT_METHOD_SERVICE для тех, кто фрагментирован или не в основной деятельности и т. Д.
Оливер Диксон

7
Вы можете попробовать это. Это работает, если вы называете это из деятельности. . GetWindow () setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Синан Диздаревич

Что если нам нужно вызвать это изнутри слушателя? КакonFocusChange()
Андре Yuhai

44

Просто добавьте два атрибута в родительский вид editText.

android:focusable="true"
android:focusableInTouchMode="true"

36

Поместите это в манифест внутри тега Activity

  android:windowSoftInputMode="stateHidden"  

или android: windowSoftInputMode = "stateUnchanged" - это работает следующим образом: не показывать его, если оно еще не отображается, но если оно было открыто при входе в действие, оставьте его открытым).
Суджит Кумар Гупта

ты прав. но что, если ориентация изменилась?
Санееш

26

Попробуй это:

<activity
    ...
    android:windowSoftInputMode="stateHidden|adjustResize"
    ...
>

Посмотрите на это для более подробной информации.


14

Чтобы скрыть программную клавиатуру во время запуска новой операции или onCreate(), onStart()и т. Д., Вы можете использовать код ниже:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

10

Использование AndroidManifest.xml

<activity android:name=".YourActivityName"
      android:windowSoftInputMode="stateHidden"  
 />

Использование Java

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

используя клавиатуру решения выше, скрыть, но редактировать текст, чтобы не фокусироваться при создании activiy, но захватить его, когда вы касаетесь их, используя:

добавить в ваш EditText

<EditText
android:focusable="false" />

также добавьте слушатель вашего EditText

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});

7

Добавьте следующий текст в ваш XML-файл.

<!--Dummy layout that gain focus -->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical" >
            </LinearLayout>

6

Я надеюсь, что это сработает, я пробовал много методов, но этот работал для меня fragments. просто поместите эту строку в onCreateview / init.

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

5

Чтобы скрыть программную клавиатуру во время запуска новой операции или метода onCreate (), onStart () и т. Д., Используйте код ниже:

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);

Чтобы скрыть программную клавиатуру во время нажатия кнопки в действии:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

5

Используйте SOFT_INPUT_STATE_ALWAYS_HIDDEN вместо SOFT_INPUT_STATE_HIDDEN

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

5

добавить в свою деятельность в манифестах это свойство

android:windowSoftInputMode="stateHidden" 

4

Поместите этот код в свой Java-файл и передайте аргумент для объекта в edittext,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

4

Вы можете установить конфигурацию на AndroidManifest.xml

Пример:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>

4

Используйте следующий код, чтобы скрыть программную клавиатуру в первый раз при запуске действия

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);

3

Попробуйте это тоже

Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

3

Приведенные выше ответы также верны. Я просто хочу дать краткое описание того, что есть два способа скрыть клавиатуру при запуске действия, из файла manifest.xml. например:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • Вышеуказанный способ всегда скрывает его при входе в активность.

или

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • Это говорит, что не меняйте его (например, не показывать, если оно еще не показано, но если оно было открыто при входе в действие, оставьте его открытым).

2

Вот что я сделал:

yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
        yourEditText.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);   // handle the event first
                InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard
                    yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
                }
                return true;
            }
        });

2

Если ваше приложение ориентировано на Android API Level 21 или более, чем доступен метод по умолчанию.

editTextObj.setShowSoftInputOnFocus(false);

Убедитесь, что вы установили ниже код в EditTextтеге XML.

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />

1

Попробуй это.

Сначала в xml с возможностью поиска ставятся поля (имя, подсказка и т. Д.), А @stringне буквальные строки.

Затем метод onCreateOptionsMenu, у него должен быть ComponentNameобъект с именем вашего пакета и вашим завершенным именем класса (с именем пакета). В случае, если действие с SearchViewкомпонентом совпадает с использованием результатов поиска getComponentName(), как говорит разработчик Google Android.

Я перепробовал много решений, и после долгой работы это решение работает для меня.


1
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

this one worked for me

1
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

это будет работать


Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.
Rollstuhlfahrer
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.