前言
平常开发中经常遇到一块的文本信息,其中包括不同的Style,比如说某些字体大小、颜色不一致;包含某些网页链接等等。之前我通常使用多个TextView来实现它们,但是过多的TextView不仅很难维护而且在性能消耗上也比较大;因此就有了这篇关于SpannableString的文章。以此记录。
什么是SpannableString?
This is the class for text whose content is immutable but to which
markup objects can be attached and detached.
For mutable text, see {@link SpannableStringBuilder}.
通俗的说:它就是不可变文本类,但是可以对特定的文本加以修饰达到前文所述的效果。其创建方式与String类似不多说明。
如何对特定的文本进行特殊的修饰
- 通过setSpan函数即可实现
spannableString.setSpan(span, strat, end, flag);
对参数加以说明,如下表:
参数 | 含义 |
---|---|
start | 需要修饰文本块的起始下标 |
end | 结束下标 |
span | 特定的样式修饰类 |
flag | 指定span修饰的区域是否包括start,end等 |
Spannable.FLAG四种模式:
- Spannable.SPAN_INCLUSIVE_EXCLUSIVE 起始下标之前添加新文字也会应用、结束下标之后添加新文字不会应用
- Spannable.SPAN_INCLUSIVE_INCLUSIVE 起始下标和结束下标前、后添加文本都会应用
- Spannable.SPAN_EXCLUSIVE_INCLUSIVE 与第一种相反
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 都不包括
一些常用的Span
- ForegroundColorSpan 设置字体颜色
final String content = mForegroundTv.getText().toString();
SpannableString spannableString = new SpannableString(content);
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#FFD700"));
spannableString.setSpan(foregroundColorSpan, 2, content.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
mForegroundTv.setText(spannableString);
- BackgroundColorSpan 设置背景色
final String content = mBackgroundTv.getText(</