我正在制作自己的文本编辑器,并且我希望段落之间总是有额外的空间,所以我覆盖了 EditText 的 OnKeyListener 以便在按下 Enter 时将两个换行符插入到文本中,并且当光标位于时按下 Backspace在段落的开头,两个字符被删除而不是一个。
看起来很简单,但我的问题是,如果输入法(即键盘)在按下 Enter 并按下 Backspace 时刚刚完成编辑一个单词,它将尝试通过用带下划线的自动替换该单词来处理 Backspace。自身的可纠正版本(用自身覆盖单词)。但是,由于额外的换行符,光标已经向前移动了两个字符,而输入法不知道这一点,所以当它覆盖时,它会关闭一个字符。
抱歉,如果这令人困惑;这是一个错误示例(垂直条标记光标所在的位置):
在空行上写一个字
test|
点击回车,出现一个新行
test |
按删除
ttest|
到目前为止我为修复该错误所做的尝试:
使用 OnKeyListener 正确处理退格。不幸的是,OnKeyListener 只在输入法完成它的事情后才获得关键事件。
使用 TextWatcher 撤消输入法所做的操作。不幸的是,TextWatcher 无法知道是否按下了 Backspace,或者它看到的文本是否是其他内容的结果。
放弃按 Enter 时自动添加额外换行符的整个想法。不幸的是,似乎没有任何其他方法可以在段落之后添加额外的空格。据我所知,TextView 的跨度只能为段落添加水平边距,但不能为垂直边距添加。
所以我认为我最好的选择是在输入法得到它之前抓住退格键(顺便说一下,OnKeyPreIme 也不起作用)。我宁愿不必完全编写自己的 IME,并且我想让用户选择使用他们喜欢的任何 IME 进行输入,但如果我必须将自定义 IME 与文本编辑器捆绑在一起,那就这样吧。即便如此,关于自动更正如何工作以及在何处实现的文档很少,我什至不知道从哪里开始。
任何帮助将非常感激; 提前致谢!