为什么EditText会在键入时自动合并单词中的所有范围?

时间:2017-10-30 02:25:48

标签: android spannablestring

我有一个例子:

 var ssb = SpannableStringBuilder("abcd")
 ssb.setSpan(ForegroundColorSpan(Color.RED), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
 ssb.setSpan(ForegroundColorSpan(Color.BLUE), 2, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
 ssb.removeSpan(ssb.getSpans(2, 4, ForegroundColorSpan::class.java)[0])
 ssb.setSpan(ForegroundColorSpan(Color.GREEN), 3, 4, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
 text.text = ssb

我发现我设置的所有范围都合并为1作为第一个跨度。 之前: enter image description here

输入新字符后:

enter image description here

如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

setSpan()的最后一个参数是一个控制跨度行为的标志。您通过了Spanned.SPAN_EXCLUSIVE_INCLUSIVE,其文档说明了:

  

SPAN_EXCLUSIVE_INCLUSIVE类型的非0长度跨度展开以包括在其结束点插入但未在其起始点插入的文本。

如果您希望您的跨度在用户输入EditText时保持固定,请将您的标记更改为Spanned.SPAN_EXCLUSIVE_EXCLUSIVE