android - 使用谷歌键盘作为输入在 EditText 上丢失跨度

标签 android input android-edittext keyboard textview

在特定索引范围内使用 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/

相关文章:

android - 我可以在 PlacePicker.IntentBuilder 中设置 LatLngObject 以查看 map 中的那个地方吗?

android - 检索项目的父项时出错 - Android Studio

C++文件写入/读取

java - 如何根据给编辑 TextView 的计数值动态实现线性布局的代码

java - 断开连接/错误时清除 socket.io 缓冲区

java - 缓存 BufferedInputStream?明智的?

forms - 删除 bootstrap 3 上文本输入的边框

javascript - 如何使用 JS/Jquery 检测输入值何时动态变化

android - 缺少 EditText 选择 anchor

android - Android 中 EditText 的最大宽度