Android отклонить клавиатуру - PullRequest
138 голосов
/ 24 августа 2010

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

Ответы [ 8 ]

316 голосов
/ 24 августа 2010

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

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

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
64 голосов
/ 17 сентября 2013

Решение, приведенное выше, работает не для всех устройств, кроме того, оно использует 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);
    }
}
28 голосов
/ 27 марта 2014

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

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);
    }
}
14 голосов
/ 24 августа 2010

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

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
7 голосов
/ 19 мая 2017

Вот решение Kotlin (смешивание различных ответов в потоке)

Создание функции расширения (возможно, в обычном классе 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()
5 голосов
/ 31 октября 2012

Первое решение с 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);
4 голосов
/ 16 мая 2016
    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();
        //give decorView a chance
        if (view == null) view = window.getDecorView();
        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();
    }
}
0 голосов
/ 02 сентября 2018

Используя контекст представления, мы можем достичь желаемого результата с помощью следующих методов расширения в Kotlin:

/**
 * Get the [InputMethodManager] using some [Context].
 */
fun Context.getInputMethodManager(): InputMethodManager {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return getSystemService(InputMethodManager::class.java)
    }

    return getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
}

/**
 * Dismiss soft input (keyboard) from the window using a [View] context.
 */
fun View.dismissKeyboard() = context
        .getInputMethodManager()
        .hideSoftInputFromWindow(
                windowToken
                , 0
        )

Как только они будут созданы, просто позвоните:

editTextFoo.dismiss()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...