clearFocus () работает, но клавиатура остается открытой - PullRequest
0 голосов
/ 06 июня 2019

У меня есть один текст для редактирования. Я хочу, чтобы, когда пользователь покончил с этим, очистил его фокус.

Сверните все ответы здесь Я сделал фокусировку на родительском элементе и при необходимости очищаю фокус моего редактируемого текста. Проблема в том, что, хотя она больше не в фокусе, клавиатура остается открытой, потому что теперь родитель находится в фокусе. Для пользователя нет смысла, что клавиатура все еще открыта.

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

Есть ли способ убрать фокус и закрыть клавиатуру?

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

fun closeKeyboard(activity: Activity) {

    val view = activity.currentFocus
    if (view != null) {
        val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?
        imm!!.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_IMPLICIT_ONLY)
    }
}

1 Ответ

0 голосов
/ 06 июня 2019

Очистить EditText Focus:

EditText editText = findViewById(R.id.someEditText);
editText.clearFocus();

или в крайнем случае:

getWindow().getDecorView().clearFocus();

или также добавить эти атрибуты в макет:

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

Java из Activity

/*
 * Dismiss keyboard
 * */
try {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    View v = getWindow().getCurrentFocus();
    if (v != null) {
        IBinder windowToken = v.getWindowToken();
        if (windowToken != null && imm != null) {
            imm.hideSoftInputFromWindow(windowToken, 0);
        }
    }
} catch (Exception e) {
    System.out.println(e.getMessage());
}

Функция расширения Kotlin

/*
 * Dismiss keyboard
 * */
 fun Context.dismissKeyboard() {
     val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
     val windowToken = (this as? Activity)?.currentFocus?.windowToken
     windowToken?.let { imm.hideSoftInputFromWindow(it, 0) }
 }
...