2011-09-13 125 views
3

我有一个游戏,使用C++的Java回调来强制在用户触摸屏幕时打开软键盘。 Java代码很简单:如何强制从本机代码打开Android软键盘?

this._inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 

这一直很好了一段时间,但最近我们已经收到一些摩托罗拉Droid的用户投诉,软键盘无法打开它们。由于我们最近才开始接受这些投诉,并且这是很多用户,我认为这是对这些设备的某种更新。

有没有更好的方法,我可以强制键盘打开?我在网上找到的所有链接都讨论了使用文本框控件等,但我的应用程序主要是C++,根本不使用标准控件。

回答

5

我不知道这是否与您的问题有关,但是当有些设备有时会出现“不同步”并隐藏我想要显示和隐藏时,我仅使用InputMethodManager.toggleSoftInput()反之亦然。

我采取的事实优势,取得了一些成功,虽然IMM.showSoftInput()不会显示键盘,IMM.hideSoftInputFromWindow()可靠密切的,所以当我想展示我现在调用IMM.hideSoftInputFromWindow(),然后是IMM.toggleSoftInput(),并使用IMM.hideSoftInputFromWindow()自己来隐藏一个键盘。

[一天后...]

编写昨日上述使我重新思考我是如何使用软键盘处理(我的意思是,showSoftinput()工作,只是没有我们预期的方式到),所以这里有更好的方法:

首先,你需要设置你的视图,以便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仍然完成()

+0

这是我听过的最好的建议。不幸的是,我不能在实际遇到问题的设备上测试此功能,因为我们没有任何功能,但是我会试用此功能。如果有效,我会将其标记为答案。谢谢! –

+0

试过这个和它的一些变化,但问题仍然出现在Droid仿生。我所做的任何事似乎都无法成功地打开该设备上的软键盘。 –

+0

你有机会获得仿生吗?我真的很好奇,如果键盘适用于“PocketSat3演示”(免费从市场)。该应用程序启动与键盘兼容性测试。 – jimkberry

相关问题