我正在显示textinput的对话框,如果没有打开硬键盘,我想自动显示软键盘。为了让它在我的三星Galaxy Tab上显示,我不得不使用SHOW_FORCED标志,SHOW_IMPLICIT标志不起作用。此外,在对话解雇时,如果我强行显示,我想关闭键盘。但是,我在下面使用的代码不会关闭Galaxy Tab上的键盘;我认为这是因为我使用了Explicit标志来显示。
/* from the dialog constructor*/
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.restartInput(mEditText);
//only display if there is no hard keyboard out
Configuration config = getResources().getConfiguration();
if (config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES)
{
mForcedKeyboardDisplay = true;
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
/* from the onDismiss() method*/
//if we previously forced keyboard display, force it to close
if (mForcedKeyboardDisplay)
{
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.restartInput(mEditText);
imm.hideSoftInputFromWindow(mEditText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
//this doesn't work either
//imm.hideSoftInputFromWindow(mEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
//nor does this
//imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
}
答案 0 :(得分:4)
首先,不要使用toggleSoftInput()
。这就是它的名字所说的 - 切换IME的状态。如果您确实希望确保显示,请使用showSoftInputFromWindow()
。
其次,没有理由拨打restartInput()
。
使用showSoftInput()
标记调用0
正是框架在点击文本视图以显示IME时所执行的操作。实际上这里是代码:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/TextView.java
如果你可以通过点击文本视图来显示IME,但是你自己的电话无法正常工作,你真的需要找出你的电话无法正常工作的原因。我强烈建议不要使用SHOW_FORCED - 这有一些特殊的行为,我怀疑你想要。 (例如,如果用户按下主页,IME将保持打开状态。通常不可取。)
您调用隐藏IME不起作用的最可能原因是您的窗口在此时没有输入焦点...如果是这种情况,您可能会在日志中看到一条消息。实际上,请务必查看日志,因为在发生问题时通常会打印消息。