gpt4 book ai didi

android - 我可以覆盖 Android 输入法处理自动完成和自动更正的方式吗?

转载 作者:太空狗 更新时间:2023-10-29 15:19:39 25 4
gpt4 key购买 nike

我正在制作我自己的文本编辑器,我希望段落之间总是有额外的空间,所以我覆盖了 EditText 的 OnKeyListener 以便在按下 Enter 时在文本中插入两个换行符,当按下 Backspace 时光标位于段落的开头,两个字符被删除而不是一个。

看起来很简单,但我的问题是如果输入法(即键盘)在按下 Enter 然后按下 Backspace 时刚刚完成编辑一个单词,它将尝试通过用一个单词替换该单词来处理 Backspace 本身带下划线的自动更正版本自身(用自身覆盖单词)。但是,由于额外的换行符,光标已经向前移动了两个字符,而输入法并不知道这一点,因此当它进行覆盖时,它被关闭了一个字符。

抱歉,如果这让您感到困惑;这是错误的示例(垂直条标记光标所在的位置):

  1. 在空行上写一个词

    test|
  2. 按回车键出现新行

    test

    |
  3. 按删除键

    ttest|

到目前为止,我已尝试修复错误:

  1. 使用 OnKeyListener 正确处理退格键。不幸的是,OnKeyListener 仅在输入法完成其操作后才获取按键事件。

  2. 使用 TextWatcher 撤消输入法所做的操作。遗憾的是,TextWatcher 无法知道是否按下了退格键,或者它看到的文本是否是其他操作的结果。

  3. 放弃每当按下 Enter 时自动添加额外换行符的整个想法。不幸的是,似乎没有任何其他方法可以在段落后添加额外的空格。据我所知,TextView 的 span 只能为段落添加水平边距,而不能添加垂直边距。

所以我认为我最好的选择是在输入法获取退格键之前尝试捕捉退格键(顺便说一句,OnKeyPreIme 也不起作用)。我宁愿不必完全编写自己的 IME,并且我想让用户可以选择使用他们喜欢的任何 IME 进行输入,但是如果我必须将自定义 IME 与文本编辑器 bundle 在一起,那就这样吧。即便如此,关于自动更正的工作原理和实现位置的文档还是太少了,我什至不知道从哪里开始。

任何帮助将不胜感激;提前致谢!

最佳答案

使用 restartInput 不是正确的方法,因为它会重置 IME 状态并会出现性能问题。您可以使用 TextWatcher 来监听文本更改并相应地更新编辑器中的文本。你可以看看怎么做here .

此外,如果您通过扩展 EditText 创建您的编辑器,您可以覆盖该方法

void handleTextChanged(CharSequence buffer, int start, int before, int after) {

并根据您的要求更新文本。

关于android - 我可以覆盖 Android 输入法处理自动完成和自动更正的方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com