在没有任何键盘操作的情况下隐藏活动中的软键盘

6

我有一个选项卡视图,每个选项卡都对应一个Activity。当我从第一个选项卡切换到第二个选项卡时,软键盘仍然存在,而第二个选项卡只显示一个可点击的列表。我希望软键盘消失,所以我尝试了以下方法:

public static void hideSoftKeyboard (Activity activity, View view) {
  InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
  imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

但是这种方法行不通,因为没有相关的视图可以提供输入,因为屏幕上没有接收键盘输入的视图。有什么解决方法吗?
6个回答

16
在您的代码的第三行尝试使用以下代码:
```java imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0); ```

16

请尝试Joe在以下链接中提供的答案:Stop EditText from gaining focus at Activity startup

将此代码放置在您的活动清单中: android:windowSoftInputMode="stateHidden"

这是一个常见问题,很好知道框架实际上非常好地处理了这个问题。


3
我有这个问题,但它没有帮助。当我使用任务切换器从一个打开了键盘的活动切换到我的活动(该活动没有文本输入,因此不需要键盘),键盘仍然保持打开状态。 - ArtOfWarfare
1
如果您正在一个Activity中,点击EditText以显示键盘,然后按操作栏标头的返回按钮,这也不起作用。即使该Activity设置了windowSoftInputMode,返回到上一个Activity时也不会隐藏键盘。 - user153275

4
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

4
你也可以尝试:
``` imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0 ); ```
该代码是用于强制显示输入法的。

0

当我尝试在转换动画播放时隐藏键盘时,我遇到了类似的问题。

这对我有用:

imm.hideSoftInputFromWindow(activity.getWindow().getDecorView().getWindowToken(), 0)

0

这种方法可以帮助您以任何方式隐藏键盘。对我来说效果很好。

public void hideKeyboard(Activity activity, View view) {
        if (activity != null ) {

            if(view != null)
            {
                try {
                    InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else
            {
                activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
            }

        }
    }

它是否也适用于始终隐藏Webview中的软键盘? - Criss

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