使用Google键盘作为输入丢失在EditText上的跨度

时间:2016-10-16 20:13:04

标签: android input android-edittext keyboard textview

在特定索引范围内使用TextWatcher时,我正在尝试使用Spannable.EXCLUSIVE_INCLUSIVE标志应用ForegroundColorSpan。

使用我的设备的默认输入(三星键盘)没有任何问题,一切都按预期工作,但是当使用谷歌键盘作为输入,这是一个不同的故事。

从我的调试中我发现,即使你改变一个角色,谷歌键盘也会放置整个单词 - 我猜这是因为单词校正功能。因此,如果跨度应用于单词中的某个点(即使在结尾处),并且用户输入更多文本,则跨度消失。 唯一的例外是当跨度应用于单词中的最后一个字符时,用户输入一个空格(“结束”单词)。

我找到的解决方法是简单地检查输入是否是一个完整的单词,并且只要它是 - 再次应用Span。虽然这确实有效,但它不是一个非常好的解决方案,因为我需要每次都设置插入符号,并且当必须避免时我必须重新应用旋转(这就是我使用Spannable.EXCLUSIVE_INCLUSIVE标志的原因) )。

P.S。我尝试了其他标志,例如INCLUSIVE_INCLUSIVE,它有效 - 但是它也会向后应用跨度,导致跨度应用于整个单词,而不是我指定的索引。

这个问题有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

好的,所以我找到了一个不同的解决方案 - 关闭键盘的输入建议。这样做可以防止输入成为整个单词,而不是每次只输入一个字符。

为此,我必须在EditText的inputType属性中添加textNoSuggestions标志。

android:inputType="textNoSuggestions|<other_flags>"

我在此处找到了有关此inputType的更多信息:Turn off autosuggest for EditText?