【问题标题】:Android InputMethodService Inconsistent State in Fullscreen ModeAndroid InputMethodService 在全屏模式下的状态不一致
【发布时间】:2023-03-21 17:01:01
【问题描述】:

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

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

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

  • 我可以正常输入普通字符。我使用getCurrentInputConnection().commitText(String.valueOf(code), 1); 插入这些
  • 当我按退格键删除一个字符时,光标向后移动,前面的字符被删除。这表现得很好。从此时起,后续的击键将不再发挥应有的作用:

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

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

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

【问题讨论】:

    标签: android android-softkeyboard android-input-method soft-keyboard


    【解决方案1】:

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

    我摆脱了ExtractedTextRequest,现在通过两次(较大的)调用InputConnectiongetTextBeforeCursor()getTextAfterCursor() 以及我在问题组件中描述的不良行为来确定文本字段是否为空该帖子不再出现。

    【讨论】:

      猜你喜欢
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多