我有一个例子:
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
输入新字符后:
如何避免这种情况?
答案 0 :(得分:0)
setSpan()
的最后一个参数是一个控制跨度行为的标志。您通过了Spanned.SPAN_EXCLUSIVE_INCLUSIVE
,其文档说明了:
SPAN_EXCLUSIVE_INCLUSIVE类型的非0长度跨度展开以包括在其结束点插入但未在其起始点插入的文本。
如果您希望您的跨度在用户输入EditText
时保持固定,请将您的标记更改为Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
。