【问题标题】:Losing spans on EditText with Google Keyboard as input使用 Google 键盘作为输入在 EditText 上丢失跨度
【发布时间】:2017-02-25 18:19:40
【问题描述】:

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

使用我设备的默认输入(三星键盘)没有任何问题,一切都按预期工作,但是当使用 Google 键盘作为输入时,情况就不同了。

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

我发现的解决方法是简单地检查输入是否是一个完整的单词,并且无论何时 - 再次应用 Span。虽然这确实有效,但这不是一个很好的解决方案,因为我每次都需要在末尾设置插入符号,而且我必须在可以避免的情况下重新应用旋转(这就是我使用 Spannable.EXCLUSIVE_INCLUSIVE 标志的原因)。

附:我尝试了其他标志,例如 INCLUSIVE_INCLUSIVE 并且它有点工作 - 但是它也向后应用跨度,导致跨度应用于整个单词,而不是我指定的索引。

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

【问题讨论】:

    标签: android input android-edittext keyboard textview


    【解决方案1】:

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

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

    android:inputType="textNoSuggestions|<other_flags>"
    

    我在这里找到了关于这个 inputType 的更多信息:Turn off autosuggest for EditText?

    【讨论】:

      猜你喜欢
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2012-05-25
      • 1970-01-01
      • 2023-03-09
      • 2013-02-28
      • 2016-03-15
      相关资源
      最近更新 更多