我有一个应用程序,需要在执行大量操作时关闭软键盘。例如,单击按钮时,绘制新布局时,屏幕方向更改时,控制器告诉UI 时等等。我使用 optionsMenuButton 通过 ViewFlipper 翻转视图,显然我希望键盘隐藏在翻转视图中(那里没有输入字段)。
到目前为止,我已经尝试过这些,并说明为什么这些不可靠:
这个没用,因为我有很多编辑文本和其他视图。如果可能的话,我需要一个更通用的,一个不需要视图作为参数的。
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
这个对我根本不起作用:
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
这个可以工作,但是当视图翻转时会立即再次弹出键盘。
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
这个有时有效,但 getCurrentFocus() 大多数时候返回 null 。
InputMethodManager inputManager = (InputMethodManager)
Context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
这个只有在显示键盘时才有效:
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
这不像第一段代码那样与 EditText 一起使用,但与根布局一起使用,它会随着方向变化和每次调用 oncreate 时发生变化。对于横向/纵向和普通/大,我有不同的布局 XML。所有根布局都有 ID root
。这第一次工作得很好,但在那之后,它就不再工作了。
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(findViewById(R.id.root).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
底线:我已经尝试了很多软键盘隐藏方法,但它们似乎都不能可靠地工作。有什么方法可以可靠地隐藏软键盘吗?