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

标签 android 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 版本上运行良好。在Android 9.0中,没有效果,软键盘不隐藏。

最佳答案

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

修复方法如下:

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 获取窗口 token ,而不是从 currentFocused View 获取它。因此这就像一个魅力。

关于android - 隐藏软键盘在 Android 9.0 Pie 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55104709/

相关文章:

如果单击上一项,Android PagerAdapter 不会报告正确的位置

java - RxJava2 : Need help to convert java code into rx

android - 使用 api 7 的 appcompat 自定义操作栏颜色

android - 我可以针对未发布的 SDK 版本吗?

Android MuPDF 错误

android - 为什么 Android 的 ImageDecoder(在 Pie 中引入)没有公共(public)的 InputStreamSource?

java - 在没有时间源的情况下,Android源码的哪一部分决定了Android的初始时间?

java - 将设备从 Android 8 更新到 9 后无法从 Android Studio 启动应用

android - 升级到android后无法构建项目-P

android - 在android中使用jfoenix