隐藏软键盘在 Android 9.0 Pie 中不起作用

Hiding SoftKeyboard not working in Android 9.0 Pie

我在 android 中有隐藏软键盘的代码:

public void hideKeyboard() {
    if (getActivity() != null) {
        View view = getActivity().getCurrentFocus();
        if (view != null) {
            InputMethodManager manager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            if (manager != null) {
                manager.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }
    }
}

除了 Android 9.0 以外的其他 Android 版本都可以正常工作。在Android9.0中没有效果,软键盘不隐藏

这是因为即使 editText 已获得焦点,getCurrentFocus() 仍会返回 null。因此没有 window 标记,没有它我们无法隐藏键盘。

修复如下:

public void hideKeyboard() {
    if (getActivity() != null) {
        InputMethodManager manager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (manager != null) {
            manager.hideSoftInputFromWindow(getActivity().findViewById(android.R.id.content).getWindowToken(), 0);
        }
    }
}

我们从 android.R.id.content 获取 window 令牌,而不是从 currentFocused View 获取。因此这很有魅力。