Android:如何关闭显式显示的软键盘?

ab1*_*b11 1 android android-softkeyboard

我正在显示一个文本输入对话框,如果没有打开硬键盘,我想自动显示软键盘。为了让它在我的三星 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);
    }
Run Code Online (Sandbox Code Playgroud)

hac*_*bod 5

首先,不要使用toggleSoftInput(). 这就是它的名字所说的——切换 IME 的状态。如果您确实想要它,请确保显示它,请使用showSoftInputFromWindow().

其次,没有理由打电话restartInput()

当您点击文本视图以显示 IME 时showSoftInput(),使用0标志进行调用正是框架所做的。事实上这里是代码:https : //android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/TextView.java

如果您可以通过点击文本视图来显示 IME,但是您自己的呼叫无法正常工作,您真的需要弄清楚为什么您的呼叫无法正常工作。我强烈建议不要使用 SHOW_FORCED——它有一些特殊的行为,我怀疑你想要。(例如,如果用户按下 Home 键,IME 将保持打开状态。通常是不可取的。)

您调用隐藏 IME 不起作用的最可能原因是您的窗口此时没有输入焦点……如果是这种情况,您可能会在日志中看到一条消息。事实上,无论如何一定要查看日志,因为问题发生时通常会打印消息。

  • 谢谢你。我切换到 showSoftInput(),但键盘仍未显示。我认为这是因为 show 调用在我的对话框构造函数中,其后可能是某种重新隐藏键盘的布局命令。将调用移动到 mEditText.post(...) 修复了这个问题。 (4认同)