3

我有这段代码用于在 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 版本。在 Android 9.0 中,它没有任何作用,软键盘也没有隐藏。

4

1 回答 1

3

这是因为getCurrentFocus()即使 editText 已经聚焦,它也会返回 null 。因此没有窗口令牌,没有它我们无法隐藏键盘。

这是修复:

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);
        }
    }
}

我们是从 currentFocused View 获取窗口令牌,android.R.id.content而不是从 currentFocused View 获取它。因此,这就像一个魅力。

于 2019-03-11T14:58:33.283 回答