Android: Скрыть клавиатуру после нажатия кнопки - программирование
Подтвердить что ты не робот

Android: Скрыть клавиатуру после нажатия кнопки

Мне нужно скрыть клавиатуру Android после нажатия кнопки.

Я видел много примеров того, как это сделать, однако все они, похоже, используют определенный объект editText.

например.

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

Моя проблема в том, что я строю экран динамически, поэтому могут быть текстовые поля редактирования манны. Есть способ, которым клавиатура может быть скрыта без необходимости указывать, для какого объекта editText я ее скрываю.

Спасибо

Martin

4b9b3361

Ответ 1

Вместо этого вы можете установить его в свой макет, то есть:

LinearLayout mainLayout;

// Get your layout set up, this is just an example
mainLayout = (LinearLayout)findViewById(R.id.myLinearLayout);

// Then just use the following:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mainLayout.getWindowToken(), 0);

Это пример, предполагающий, что ваш макет будет создан независимо от того, сколько объектов EditText (или других объектов) помещено на него.

Edit: Кроме того, что-то, что я считаю очень полезным, - это убедиться, что клавиатура скрыта при первом запуске активности (то есть: если EditText - это первое, что сфокусировано). Чтобы сделать это, я поместил это в метод onCreate() Activity:

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

Ответ 2

Не забудьте воспользоваться блоком try catch, потому что если ваша клавиатура не открыта и если вы используете приложение с клавиатурной клавиатурой, это приведет к сбою

try {
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
} catch (Exception e) {
    // TODO: handle exception
}

Ответ 3

Скрыть клавиатуру можно с помощью следующего кода, возможно, на кнопке нажмите кнопку "Событие":

//================ Hide Virtual Key Board When  Clicking==================//

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow("Your Button/EditText Object".getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);

//======== Hide Virtual Keyboard =====================//

Ответ 4

Вы используете этот код

// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

Ответ 5

Если проблема связана с активностью, то будет работать следующее:

    try {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    } catch (Exception e) {
        // TODO: handle exception
    }

else, если код требуется в фрагменте, выполните следующие

    try {
        InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
    } catch (Exception e) {
        // TODO: handle exception
    }

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

Ответ 6

InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(rootView.getWindowToken(), 0);

Ответ 7

edittext.onEditorAction(EditorInfo.IME_ACTION_DONE);