感谢您的任何帮助。我会提前承认我的 Java 仍然不成熟,所以我觉得我在我的头上。我几乎整天都在寻找这个答案,并尝试了各种方法都无济于事。
我正在使用一个商业游戏引擎,它将游戏导出到具有 GLSurfaceView 类实现的 Eclipse 项目。他们有一个钩子可以将单键代码发送到游戏引擎中,用于按键和按键事件,我想使用这些钩子从 Android 键盘(软键盘或硬键盘)发送按键。
覆盖 view.onKeyUp、onKeyDown 和 onKeyMultiple 接口可以让我得到我想要做的几乎所有事情,但是当使用像 Swype 这样的 IME 时,我还有一个问题。
当我 swype 这个词时,它会出现在浮动窗口中(我相信 swype 正在绘制这个),但它不会在 onKeyUp、onKeyDown 或 onKeyMultiple 回调中出现。如果我在键盘上敲击空格或任何其他字母,我会得到 onKeyMultiple 回调,它会发送我之前输入的字符串。
我以为我可以在自己的 InputConnection 中调用 finishComposingText(),所以我覆盖了 GLSurfaceView 类中的 View.onCreateInputConnection 方法,然后在游戏引擎的 DrawFrame() 方法中调用了 finishComposingText(),它有点工作。它实际上立即通过 onKeyMultiple 回调发送了文本,但是如果我按下一个键,它会再次发送相同的文本,将其复制到我的“3D 编辑框”中。我也不喜欢每帧都调用它的想法。
我完全不知道应该采取什么方法来让 swype 结果在我 swype 后立即显示而无需按键。游戏引擎没有使用 TextView 或类似的 Android 小部件,所以我也尝试了以下操作,但没有运气:
public InputConnection onCreateInputConnection ( EditorInfo outAttrs )
{
outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE ;
outAttrs.inputType = InputType.TYPE_NULL;
oInputC = new BaseInputConnection ( this, false ) ;
return oInputC;
}
oInputC 只是一个静态变量,我可以用来调用 finishComposingText() 方法。
任何人都可以提出一种方法或参考吗?我只发现了其他几个类似的问题,而且都没有得到回答。似乎没有多少人在创建自己的文本编辑框并且需要为他们实现后端,但这基本上是我需要做的。