您可以强制 Android 使用输入法管理器, 调用hideSoftInputFromWindow
,传入包含焦点视图的窗口的标记。
// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
这将强制键盘在所有情况下都被隐藏。在某些情况下,您会想要传入InputMethodManager.HIDE_IMPLICIT_ONLY
作为第二个参数,以确保仅在用户没有明确强制它出现时(通过按住菜单)隐藏键盘。
笔记:如果您想在 Kotlin 中执行此操作,请使用:context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
Kotlin 语法
// Only runs if there is a view that is currently focused
this.currentFocus?.let { view ->
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
imm?.hideSoftInputFromWindow(view.windowToken, 0)
}
现在getSystemService()
需要一个Context
和一个服务类Class
.对于我可以调用的上下文requiredContext
但是对于 serviceClass 呢?
@capo11 我尝试使用 Application.Context.getSystemService(),所以我不需要 serviceClass,但它不起作用
在里面很适合我Fragment
使用getActivity().getSystemService()...
对隐藏软键盘也很有用的是:
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
);
这可用于抑制软键盘,直到用户实际触摸 editText 视图。
这是 2020 年唯一有效的。我在主要活动上有一个编辑文本,不希望在启动应用程序时出现键盘。
我还有另一种隐藏键盘的解决方案:
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
这里通过HIDE_IMPLICIT_ONLY
在的位置showFlag
和0
在的位置hiddenFlag
.它将强制关闭软键盘。
您在 showflags 参数中使用了隐藏标志。这仅适用于常量使用相同的整数。使用正确标志的示例
在 Android 4.0 上测试,我喜欢这个解决方案,因为我有多个编辑文本,该活动上的按钮,可以有焦点
这对我有用,我没有任何文本框或任何真正有焦点的东西。
@Mark:因为该方法称为“toggleSoftInput”,而不是“hideSoftInput” 🙂
这不能正常工作。它有时会显示键盘。
Meier 的解决方案也适用于我。就我而言,我的应用程序的顶层是选项卡主机,我想在切换选项卡时隐藏关键字 – 我从选项卡主机视图中获取窗口令牌。
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
public void onTabChanged(String tabId) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(tabHost.getApplicationWindowToken(), 0);
}
}
我也让它与 SearchView 一起工作。我的答案见下文。谢谢麦考斯!
你好,我添加了一个新的问题关于android应用程序开发你能看到吗?
请尝试以下代码onCreate()
EditText edtView = (EditText) findViewById(R.id.editTextConvertValue);
edtView.setInputType(InputType.TYPE_NULL);
此方法可作为解决 2.0 和 2.1 中“无法隐藏软键盘”错误的一种方法,如中所述code.google.com/p/android/issues/detail?id=7115…当我尝试时,上面列出的 hideSoftInputFromWindow 方法不起作用,但 editView.setInputType(0) 起作用了。
这是每个 Javadoc 合法的(不是 hack),尽管我会将方法重写为editView.setInputType(InputType.TYPE_NULL);
这可行,但是,它隐藏了 android:hint。我使用的是安卓 1.5
当您需要从对话框关闭键盘时,这非常有用,不需要获取实例或任何东西,并且可以在用户按下关闭对话框的按钮时将其分配给所有编辑文本
它有效,但它也隐藏了光标。我需要光标,但没有系统键盘。
如果您只有一个 EditText 和几个按钮,比如复选框和单选框,该怎么办?唯一需要键盘的地方是单个 EditText。您如何注册才能知道选择/单击了其他内容以隐藏键盘?
我觉得我好笨。我无法隐藏 ICS 上的键盘。在这里尝试了所有方法以及它们的组合。没门。显示它的方法有效,但无论是什么windw令牌,隐藏标志,清单设置或任何圣徒的蜡烛,我都无法隐藏它。在键盘显示我总是看到这个: I/LatinIME(396): InputType.TYPE_NULL is specified W/LatinIME(396): Unexpected input class: inputType=0x00000000 imeOptions=0x00000000
/** * 该方法用于隐藏软键盘。 * @param activity */ public void hideSoftKeyboard(Activity activity) { InputMethodManager inputMethodManager = (InputMethodManager)activity.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); }
this为我工作
需要使用带有 INPUT_METHOD_SERVICE 的 InputMethodManager 来处理软键盘,例如readyandroid.wordpress.com/show-hide-android-soft-keyboard
你是认真的吗?如果您愿意,不能在任何时候简单地隐藏键盘吗?如果您有很多按钮、文本或大屏幕,要求 Android 隐藏键盘必须是一条指令,这并不重要:S