通常使用的套路是样式属性和Span组合使用,可以考虑将设置给TextView的样式属性作为一种“基本”样式,而 Span样式是应用在基本样式“之上”并且会覆盖基本样式的样式。
例如,当给一个 TextView 设置了 textColor=”@color.blue” 属性且设置开头4个字符应用了 ForegroundColorSpan(Color.PINK),则开头4个字符会使用 span 设置的粉色,而其他文本使用 TextView 属性设置的颜色。具体API使用,自行google,或者查看github的Span Sample。
https://github.com/AndroidDog/SpanSample
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:textColor="@color/blue"/>
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 –> SpannableString