clearFocus()有效,但键盘保持打开状态

时间:2019-06-05 22:46:13

标签: android android-edittext android-softkeyboard soft-keyboard

我只有一个编辑文本。我希望当用户使用完它后,才能清除焦点。

关注所有答案here我已使父级焦点突出,并且在需要时清除了编辑文本的焦点。问题在于,尽管不再聚焦,但键盘仍保持打开状态,因为现在父级处于聚焦状态。对于用户而言,键盘仍处于打开状态是没有意义的。

**要清楚,我正在使用一种关闭键盘的方法。它始终有效,但现在不起作用,可能是因为我上面提到的。

有没有办法消除焦点并关闭键盘?

这是我用来关闭键盘的方法。

untrace(.preformat.ts)

1 个答案:

答案 0 :(得分:0)

清除EditText焦点:

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

或作为最后的手段:

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

或还将以下属性添加到布局:

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

活动中的Java

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