我不知道这是否与您的问题有关,但是当设备有时会“不同步”并在我想显示时隐藏时,我仅使用 InputMethodManager.toggleSoftInput() 遇到了一些问题,反之亦然。
通过利用 IMM.showSoftInput() 不会的事实,我取得了一些成功show键盘,IMM.hideSoftInputFromWindow()will可靠地关闭一个键盘,因此当我想显示键盘时,我现在调用 IMM.hideSoftInputFromWindow() ,然后调用 IMM.toggleSoftInput() ,并单独使用 IMM.hideSoftInputFromWindow() 来隐藏键盘。
[一天后...]
昨天写的上述内容让我重新思考我是如何处理软键盘的(我的意思是,showSoftinput()does工作,只是不是我们期望的方式)所以这里有一个更好的方法:
首先,您需要设置视图,以便 Android 知道它可以有一个软键盘 - 在 InputMethodManager 的文档中进行了描述。就我而言,我有一个从 GLSurfaceView 派生的单个视图,因此我添加了:
setFocusable(true);
setFocusableInTouchMode(true);
到构造函数,然后覆盖以下 2 个:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs)
{
outAttrs.actionLabel = "";
outAttrs.hintText = "";
outAttrs.initialCapsMode = 0;
outAttrs.initialSelEnd = outAttrs.initialSelStart = -1;
outAttrs.label = "";
outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI;
outAttrs.inputType = InputType.TYPE_NULL;
return new BaseInputConnection(this, false);
}
@Override
public boolean onCheckIsTextEditor ()
{
return true;
}
现在我可以显示键盘:
InputMethodManager mgr = (InputMethodManager)mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(mView, 0);
并且按键通过视图的 onKeyUp() 和 onKeyDown() 方法报告。
隐藏它仍然是使用 hideSoftInputFromWindow() 完成的