问题描述
我正在尝试使用 SpannableStringBuilder 为句子中所有出现的给定字符序列实现可跨越颜色,就像:
val spannableStr1 = SpannableString("Hello World!")
spannableStr1.setSpan(ForegroundColorSpan(Color.parseColor("#FF0000")),3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
val spannableBuilder = SpannableStringBuilder()
spannableBuilder.append(spannableStr1)
spannableBuilder.append(spannableStr1)
tvDemo.text = spannableBuilder
这导致:
我需要第二次出现的字符 hel
也是红色的。所以我再次尝试附加spannableStr1,但似乎不起作用。
有什么办法可以实现吗?
解决方法
spannableStr1 上的跨度设置为 0-3。不幸的是,一旦您第二次将它添加到可跨字符串构建器中,它仍然是 0-3。这导致了这里的问题 - 您将同一部分涂成红色两次。
这样做的更好方法是不向文本添加跨度。相反,只需附加文本并将跨度直接添加到 SpannableStringBuilder。这意味着第一个跨度应该是(0,3),第二个应该是(第二个 h 的索引,第二个 h 的索引 + 3)
val spannableStr1 ="hello world!"
val spannableBuilder = SpannableStringBuilder()
spannableBuilder.append(spannableStr1)
spannableBuilder.append(spannableStr1)
spannableBuilder.setSpan(ForegroundColorSpan(Color.parseColor("#FF0000")),3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuilder.setSpan(ForegroundColorSpan(Color.parseColor("#FF0000")),spannableStr1.length,spannableStr1.length + 3,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
tvDemo.text = spannableBuilder