SpannableString spannable = new SpannableString(“Text styling”);
spannable.setSpan(
new ForegroundColorSpan(Color.PINK),
0, 4,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
myTextView.setText(spannable);
如何创建使用Span
当使用 span 时,需要使用SpannedString, SpannableString 或 SpannableStringBuilder之一。 它们之间的区别在于text内容或markup是可改变的还是不可改变的,以及它们使用的内部结构:SpannedString 和 SpannableString 使用线性数组记录已添加的 span,而 SpannableStringBuilder 使用 区间树。
如何决定使用哪一个类:
-
创建后 文本 和 span 不可变 –> SpannedString
-
创建后文本不可变,仅需设置 少量的 span (<~ 10)? –> SpannableString
-
创建后需设置 文本 和 span –> SpannableStringBuilder
-
创建后需设置 大量的 span (>~ 10)? –> SpannableStringBuilder
比较难理解的是SpanedString,查看其api,可以看到其只能通过SpannableString来创建,复制其Span属性来使用,这是我的理解不知道对不对,有了解的可以指导下。SpanedString使用场景也比较少吧,一直没用过。
对于SpannableString和SpannableStringBuilder,多个 span 可以被组合且同时附加到同一段文本上。如下面的红色和粗体叠加:
Android framework在android.text.style包提供了20+的Span样式,通过2个维度可以对Span进行分类:
-
基于Span是否改变text的外形还是改变text的尺寸或布局
-
基于Span的作用范围是字符级别还是或段落级别
Sp