在特定索引范围内使用 TextWatcher 时,我尝试将 ForegroundColorSpan 与 Spannable.EXCLUSIVE_INCLUSIVE 标志一起应用。
使用我设备的默认输入(三星键盘)没有任何问题,一切都按预期工作,但是当使用谷歌键盘作为输入时,情况就不同了。
通过调试,我发现 Google 键盘会放置整个单词,即使您更改了一个字符 - 我猜这是因为单词更正功能。因此,如果 Span 应用于单词中的某个点(甚至在末尾),并且用户输入了更多文本,则 span 会消失。 唯一的异常(exception)是跨度应用于单词中的最后一个字符,并且用户输入了一个空格(“结束”单词)。
我发现的解决方法是简单地检查输入是否是一个完整的单词,只要是 - 再次应用 Span。虽然这确实有效,但它不是一个很好的解决方案,因为我每次都需要在末尾设置插入符号,而且我必须在可以避免的情况下重新应用旋转(这就是我使用 Spannable.EXCLUSIVE_INCLUSIVE 标志的原因).
附言我尝试了其他标志,例如 INCLUSIVE_INCLUSIVE 并且它有点起作用 - 但是它也向后应用跨度,导致跨度应用于整个单词,而不是我指定的索引。
这个问题有更好的解决方案吗?
最佳答案
好吧,我找到了一个不同的解决方案——关闭键盘的输入建议。这样做可以防止输入是整个单词,而每次都只是一个字符。
为此,我必须将 textNoSuggestions 标志添加到 EditText 的 inputType 属性。
android:inputType="textNoSuggestions|<other_flags>"
我在这里找到了关于此 inputType 的更多信息:Turn off autosuggest for EditText?
关于android - 使用谷歌键盘作为输入在 EditText 上丢失跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40074975/