我正在编写一个基于hello-gl2示例的 Android NDK 应用程序(针对 API 8),因此使用单个全屏 OpenGL2.0 视图。
我需要调出屏幕键盘,因此从本网站上可用的信息中,我现在可以调出键盘,将 keyup 事件发送到我的本机应用程序进行处理并关闭键盘。一切都很好,直到我切换到Swype或任何其他更先进的当时库存的键盘输入管理器并且它不起作用。
在阅读了KeyEvent开发人员文档类概述后,我所看到的似乎是预期的行为:
您永远不应该依赖接收 KeyEvents 来获取软输入法上的任何键。
所以我一直在尝试找到一种方法来捕获 IME 的输出,然后我可以将其传递给我的本机应用程序。不幸的是,我对此一点也不了解。
我在扩展的GLSurfaceView类中有这段代码:
@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;
}
我打电话给:
public boolean showSoftInput(View view, int flags)
传入从getCurrentFocus返回的视图,从本机代码显示键盘。
是否可以不使用 keyup 事件从屏幕软件键盘中提取文本?是否有可能更新我必须能够做到这一点,或者我应该寻找一种完全不同的方法?
如您所知,对这些问题表示歉意,Android 开发的非本地 Java 方面对我来说是全新的。
作为总结,我当前的实现基于这个答案,它允许使用键事件捕获软键盘文本,但是我想不使用键事件来捕获文本..(可能是 TextWatcher .. 虽然我的视图不是t 可编辑?)。
非常感谢您提供的任何帮助或建议,
安迪