3

我正在编写一个基于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 可编辑?)。

非常感谢您提供的任何帮助或建议,

安迪

4

0 回答 0