在Android 9.0 Pie中隐藏软键盘无效。

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上,这个功能没有效果,软键盘无法隐藏。

1个回答

5
这是因为尽管editText被聚焦,getCurrentFocus()仍然返回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);
        }
    }
}

我们从 android.R.id.content 获取窗口令牌,而不是从当前聚焦的视图获取。因此这个方法会非常顺畅地运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接