Android中的自定义EditText会从swype / KitKat键盘中删除单词

时间:2014-07-03 21:46:29

标签: android android-edittext android-softkeyboard textwatcher

我创建了一个自定义的MyEditText - 继承自EditText。我想修改正在显示的文本,因此我创建了一个TextWatcher,并在构造函数中调用addTextChangedListener()将其绑定到MyTextEdit。

它拦截输入正常,除非处理swype键盘。只需使用swype输入,我就可以处理粘贴,也不删除文本(1个或多个字符)。我在TextWatcher中看到的问题是:

  1. 第一个swype单词输入OK,但没有前导空格。根本不输入第二个swyped字,而是在文本中添加一个空格。第3个出现,第4个空间,依此类推。
  2. 在某些swype键盘中(例如在Galaxy 5上),SPACE键完全被忽略。
  3. 这些问题也出现在内置了swype功能的现代Android版本中。
  4. 任何线索?

    如果有帮助,我还会继续“TextView不支持文本选择。操作模式已取消。”尝试选择文字时(长按)。我的小部件是Focusable,可点击(也处于触摸模式),我还实现了返回true的onCheckIsTextEditor()。

1 个答案:

答案 0 :(得分:0)

问题在于我创建了自己的可编辑,并将其设置为新文本,而不是操纵我从afterTextChanged(可编辑的新文本)获得的可编辑。

此外,我现在分别在更改之前和之后调用TextView.beginBatchEdit()和TextView.endBatchEdit()。

最后要注意的是,如果使用跨度,请注意不要触摸不属于您的跨距。例如,迭代所有跨度(从跨越继承)并删除它们是一个非常糟糕的主意; - )