Подтвердить что ты не робот

Android убрать клавиатуру

Как отменить клавиатуру при нажатии кнопки?

4b9b3361

Ответ 1

Вы хотите отключить или отменить виртуальную клавиатуру?

Если вы хотите просто отпустить его, вы можете использовать следующие строки кода в своей кнопке при щелчке Event

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

Ответ 2

Решение выше не работает для всех устройств и, кроме того, с помощью EditText в качестве параметра. Это мое решение, просто назовите этот простой метод:

private void hideSoftKeyBoard() {
    InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

    if(imm.isAcceptingText()) { // verify if the soft keyboard is open                      
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

Ответ 3

Это мое решение

public static void hideKeyboard(Activity activity) {
    View v = activity.getWindow().getCurrentFocus();
    if (v != null) {
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
    }
}

Ответ 4

вы также можете использовать этот код при событии нажатия кнопки

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

Ответ 5

Первое решение с InputMethodManager работало как класс для меня, getWindow(). Метод setSoftInputMode не был установлен на Android 4.0.3 HTC Amaze.

@Этан Аллен, мне не нужно было редактировать текст редактирования. Может быть, вы используете внутренний класс EditText, который вы объявили содержащим методом? Вы можете сделать EditText переменной класса Activity. Или просто объявите новый EditText внутри внутреннего класса/метода и снова используйте findViewById(). Кроме того, я не обнаружил, что мне нужно знать, какой EditText в форме имеет фокус. Я мог бы выбрать один произвольно и использовать его. Например:

    EditText myEditText= (EditText) findViewById(R.id.anyEditTextInForm);  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

Ответ 6

    public static void hideSoftInput(Activity activity) {
    try {
        if (activity == null || activity.isFinishing()) return;
        Window window = activity.getWindow();
        if (window == null) return;
        View view = window.getCurrentFocus();
        if (view == null) return;
        InputMethodManager imm = (InputMethodManager) activity.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm == null || !imm.isActive()) return;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    } catch (Throwable e) {
        e.printStackTrace();
    }
}

Ответ 7

Здесь решение Котлина (смешивание различных ответов в потоке)

Создайте функцию расширения (возможно, в общем классе ViewHelpers)

fun Activity.dismissKeyboard() {
    val inputMethodManager = getSystemService( Context.INPUT_METHOD_SERVICE ) as InputMethodManager
    if( inputMethodManager.isAcceptingText )
        inputMethodManager.hideSoftInputFromWindow( this.currentFocus.windowToken, /*flags:*/ 0)
}

Затем просто используйте:

// from activity
this.dismissKeyboard()

// from fragment
activity.dismissKeyboard()