Nic*_*tch 4 android android-ndk android-softkeyboard
我有一个游戏,它使用C++回调来强制打开软键盘,当用户触摸屏幕时.Java代码就是这样的:
this._inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
Run Code Online (Sandbox Code Playgroud)
这已经好了一段时间,但最近我们收到一些摩托罗拉Droid用户的抱怨,软键盘无法为他们打开.由于我们最近才开始接受这些投诉,而且我认为这是对这些设备进行某种更新.
有没有更好的方法可以强制键盘打开?我在网上找到的所有链接都谈到使用文本框控件等,但我的应用程序主要是C++,根本不使用标准控件.
我不知道这是否与您的问题有关,但是当设备有时会"不同步"并且在我想要显示时隐藏,反之亦然时,我只使用InputMethodManager.toggleSoftInput()遇到了一些问题.
我已经取得了一些成功,因为虽然IMM.showSoftInput()不会显示键盘,IMM.hideSoftInputFromWindow()将可靠地关闭一个,所以当我想显示键盘时,我现在调用IMM.hideSoftInputFromWindow ()后跟IMM.toggleSoftInput(),并使用IMM.hideSoftInputFromWindow()自行隐藏一个.
[一天后......]
昨天写上面的内容让我重新思考我是如何处理软键盘的(我的意思是,showSoftinput()确实有效,而不是我们预期的方式)所以这是一个更好的方法:
首先,您需要设置视图,以便Android知道它可以有一个软键盘 - 在InputMethodManager的文档中有描述.在我的情况下,我有一个从GLSurfaceView派生的视图,所以我添加了:
setFocusable(true);
setFocusableInTouchMode(true);
Run Code Online (Sandbox Code Playgroud)
到构造函数,然后是以下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;
}
Run Code Online (Sandbox Code Playgroud)
现在我可以用键盘显示:
InputMethodManager mgr = (InputMethodManager)mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(mView, 0);
Run Code Online (Sandbox Code Playgroud)
并通过视图的onKeyUp()和onKeyDown()方法报告按键.
隐藏它仍然使用hideSoftInputFromWindow()完成
| 归档时间: |
|
| 查看次数: |
2948 次 |
| 最近记录: |