Android 输入法服务在全屏模式下状态不一致



我正在开发一个软键盘。我有一个扩展InputMethodService的类MyIME

我覆盖onKey(int, int)来处理按键。我的键盘能够按照我在纵向模式下定义的方式插入和删除文本,当键盘设置为全屏时,我只是遇到了横向问题。

在全屏模式下,使用框架的默认ExtractEditLayout,其中包含ExtractEditText实例。当我在全屏模式下键入时,会发生以下奇怪的行为:

  • 我可以很好地键入普通字符。我使用getCurrentInputConnection().commitText(String.valueOf(code), 1);插入这些
  • 当我按退格键删除字符时,光标向后移动并删除前一个字符。这表现得很好。从这一点开始,后续的击键不再按预期运行:

    • 如果我在第一个之后按退格键,光标会向后移动,但该字符不会被删除。按下退格键时,将执行getCurrentInputConnection().deleteSurroundingText(1, 0);

    • 同样,如果我在按退格键一次后添加更多字符,光标将向前移动,但字符不会出现在屏幕上。

当我通过将设备旋转回纵向退出全屏模式时,我键入或删除的所有字符都在那里。似乎用于撰写全屏消息的ExtractEditLayout与我的InputMethodService子类不同步,并且似乎只有在我最初尝试删除字符后它们才会变得不同步。

该错误与我每次按退格键时所做的昂贵ExtractedTextRequest有关。该请求用于确定文本字段是否为空,以便我可以确定是否将键盘设置为移位状态。

我摆脱了ExtractedTextRequest,现在通过对InputConnectiongetTextBeforeCursor()getTextAfterCursor()进行两次(大)调用来确定文本字段是否为空,并且我在这篇文章的问题组件中描述的不良行为不再发生。

最新更新