【发布时间】:2012-10-23 14:12:32
【问题描述】:
我有一个应用程序,需要在相当多的操作上关闭软键盘。例如,当点击一个按钮,当一个新的布局被绘制,当屏幕方向改变,当控制器告诉 strong> 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);
底线:我尝试了很多软键盘隐藏方法,但它们似乎都不能可靠地工作。 是否有任何方法可以可靠地隐藏软键盘?
【问题讨论】:
标签: java android android-softkeyboard