我正在做我自己的文本编辑器,并且我希望段落之间始终有额外的空间,所以我重写了EditText的OnKeyListener,以便在按下Enter时将两个换行符插入文本中,并且当按下Backspace时光标位于段落的开头,两个字符将被删除而不是一个。我可以重写Android输入法处理自动完成和自动更正的方式吗?
似乎很简单,但我的问题是,如果输入法(即键盘)刚按下Enter键然后按下Backspace时完成了一个单词的编辑,它将尝试处理Backspace本身,方法是将该单词替换为自身带下划线的自动修正版本(自行覆盖单词)。但是,由于额外的换行符,游标已经向前移动了两个字符,并且输入法不知道,所以当它将其覆盖掉一个字符时。
对不起,如果这是令人困惑;这里的错误(竖线标记光标所在)的例子:
写在一个空行字
test|
命中进入这样一个新的行出现
test |
按下删除
ttest|
事情我到目前为止已经试过修复bug:
使用OnKeyListener妥善处理退格。不幸的是,OnKeyListener仅在输入方法完成后才获取关键事件。
使用TextWatcher撤销输入法的操作。不幸的是,TextWatcher无法知道Backspace是否被按下,或者它看到的文本是否是其他内容的结果。
放弃按Enter键时自动添加额外换行符的整个想法。不幸的是,似乎没有任何其他方式在段落后添加额外的空格。据我所知,TextView的跨度只能将水平边距添加到段落,而不是垂直边缘。
所以我离开了我最好的选择是试图赶上Backspace键输入法得到它之前的思维(OnKeyPreIme没有任何工作,顺便说一句)。我宁愿不必完全编写自己的IME,我想让用户可以选择他们喜欢的任何IME进行打字,但是如果我必须将自定义IME与文本编辑器捆绑在一起,那就这样做吧。即便如此,关于自动更正的工作方式以及实现方式的文档还很少,我甚至不知道从哪里开始。
任何帮助将不胜感激;提前致谢!
自己修复了这个问题。我所要做的就是将下面的代码插入到我的EditText中(在添加换行符后处理Enter按钮的函数中): 'InputMethodManager imm =(InputMethodManager)getContext()。getSystemService(Context.INPUT_METHOD_SERVICE); ' 'imm.restartInput(this);' – Andy 2012-02-09 20:17:00