Закрытие виртуальной клавиатуры при нажатии кнопки

У меня есть Activity с EditText, кнопкой и ListView. Цель состоит в том, чтобы набрать экран поиска в EditText, нажать кнопку и отобразить результаты поиска.

Все работает отлично, но виртуальная клавиатура ведет себя странно.

Если я нажму кнопку EditText, я получу виртуальную клавиатуру. Если я нажму кнопку "Готово" на виртуальной клавиатуре, она исчезнет. Однако, если я нажму кнопку поиска, прежде чем нажимать "Готово" на виртуальной клавиатуре, виртуальная клавиатура останется, и я не могу избавиться от нее. Нажатие кнопки "Готово" не закрывает клавиатуру. Он меняет кнопку "Готово" от "Готово" до стрелки и остается видимой.

Спасибо за помощь

Ответ 1

mMyTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            // hide virtual keyboard
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(m_txtSearchText.getWindowToken(), 
                                      InputMethodManager.RESULT_UNCHANGED_SHOWN);
            return true;
        }
        return false;
    }
});

Ответ 2

InputMethodManager inputManager = (InputMethodManager)
                                  getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                     InputMethodManager.HIDE_NOT_ALWAYS);

Я положил это прямо после события onClick(View v).

Вам нужно импортировать android.view.inputmethod.InputMethodManager;

Клавиатура скрывается, когда вы нажимаете кнопку.

Ответ 3

Использовать код ниже

your_button_id.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        try  {
            InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        } catch (Exception e) {

        }
    }
});

Ответ 4

Вы должны реализовать OnEditorActionListener для своего EditView

public void performClickOnDone(EditView editView, final View button){
    textView.setOnEditorActionListener(new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(EditView v, int actionId, KeyEvent event) {
            hideKeyboard();
            button.requestFocus();
            button.performClick();
            return true;
        }
    });

И вы скрываете клавиатуру:

public void hideKeybord(View view) {
    inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),
                                  InputMethodManager.RESULT_UNCHANGED_SHOWN);
}

Вы также должны скрывать клавиатуру в своей кнопке, используя onClickListener

Теперь нажатие кнопки "Готово" на виртуальной клавиатуре и кнопке будет делать то же самое - скрыть клавиатуру и выполнить действие щелчка.

Ответ 5

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

InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

Ответ 6

Поскольку у вас есть только один текст редактирования, просто вызовите действие, выполненное для этого текста редактирования внутри вашего нажатия кнопки, а остальная часть будет обработана системой. Если бы у вас было более одного редактора, это было бы не так эффективно, потому что сначала вам нужно было сфокусировать edittext. Но в вашем случае это будет отлично работать

myedittext.onEditorAction(EditorInfo.IME_ACTION_DONE)

Ответ 7

Для операции

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

Для фрагментов используйте getActivity()

getActivity() getSystemService();.

getActivity() getCurrentFocus();.

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

Ответ 8

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

  • Для отображения клавиатуры

    editText.requestFocus();
    InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    
  • Для скрытия клавиатуры

    InputMethodManager inputManager = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); 
    inputManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
    

Ответ 9

Это решение отлично подходит для меня:

private void showKeyboard(EditText editText) {
    editText.requestFocus();
    editText.setFocusableInTouchMode(true);
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(editText, InputMethodManager.RESULT_UNCHANGED_SHOWN);
    editText.setSelection(editText.getText().length());
}

private void closeKeyboard() {
    InputMethodManager inputManager = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
}

Ответ 10

Этот код используется в событии click button

// 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);
}

Ответ 11

View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm =(InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);enter code here}

Ответ 12

Исключение ошибки Null Point Crash: У меня был случай, когда клавиатура не открывается, когда пользователь нажимает кнопку. Вы должны написать оператор if, чтобы проверить, что getCurrentFocus() не является нулем:

            InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if(getCurrentFocus() != null) {
            inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

Ответ 13

Если вы установили android:singleLine="true", автоматически кнопка скрывает клавиатуру.