我有一个应用程序,需要在许多操作中关闭软键盘。例如,单击按钮、绘制新布局、屏幕方向更改、控制器要求 UI 等等。
我使用 optionsMenuButton 来使用 ViewFlipper 翻转视图,显然我希望键盘在翻转的视图中隐藏(那里没有输入字段)。
到目前为止,我尝试了以下方法并说明它们不可靠:
这个方法不起作用,因为我有很多 editText 和其他视图。如果可能的话,我需要一个更通用的方法,不需要视图作为参数。
我使用 optionsMenuButton 来使用 ViewFlipper 翻转视图,显然我希望键盘在翻转的视图中隐藏(那里没有输入字段)。
到目前为止,我尝试了以下方法并说明它们不可靠:
这个方法不起作用,因为我有很多 editText 和其他视图。如果可能的话,我需要一个更通用的方法,不需要视图作为参数。
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的,而是针对根布局(root Layout)进行操作。根布局会随着设备旋转和每次onCreate调用而发生变化。我分别为横屏/竖屏以及普通/大屏幕设计了不同的XML布局。所有的根布局都拥有IDroot
。第一次使用时效果很好,但之后就无法正常工作了。
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(findViewById(R.id.root).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
总之,我尝试了很多软键盘隐藏方法,但似乎没有一种方法可靠。 是否有任何可靠地隐藏软键盘的方法?