SpannableString复合文本

在使用TextView布局的时候往往会发现一些一串字符中有多中不同的样式,最偷懒的办法就是写多个不同的TextView,但这样并不好,这是冗余的,还会造成性能影响,并且让布局文件变得臃肿。其实谷歌提供了一样东西用来实现一个TextView中实现多种不同的字体样式甚至是图文混排。这就是SpannableString.
在创建String的时候我们可以用它来代替,并使用SetSpan()方法来设置不同的样式,可以设置多个(比如同时加上下划线和删除线等)
方法签名
void setSpan (Object what, int start, int end, int flags)
object what :对应的各种Span,后面会提到;
int start:开始应用指定Span的位置,索引从0开始
int end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。
int flags:取值有如下四个
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。
Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。

下面重点来说一下Object what参数,因为效果都取决于它,它有如下样式

  1. ForegroundColorSpan 给文字添加颜色
  2. URLSpan 设置超链接
  3. BackgroundColorSpan 设置文字背景颜色
  4. AbsoluteSizeSpan 设置文字的字体大小
  5. RelativeSizeSpan 设置字体大小(相对值)
  6. ScaleXSpan 设置字体宽度,其实就是X轴的缩放
  7. StyleSpan 设置粗体(Typeface.BOLD_ITALIC)和斜体(Typeface.ITALIC)
  8. StrikethroughSpan 给文字添加删除线
  9. UnderlineSpan 给文字添加下划线
  10. ImageSpan 给文字设置图片
  11. SuperscriptSpan 设置上标
  12. SubscriptSpan 设置下标
  13. TextAppearanceSpan 设置字体外观(依次包括字体名称,字体大小,字体样式,字体颜色,链接颜色)
  14. TypefaceSpan 设置字体如:宋体,雅黑什么的
  15. MaskFilterSpan 给问题添加模糊或者浮雕效果如:
//模糊效果
MaskFilterSpan maskFilterSpan = 
                new MaskFilterSpan(new BlurMaskFilter(3, Blur.OUTER));
//浮雕效果
MaskFilterSpan maskFilterSpan = 
                new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3));

方法签名
removeSpan(Object what)
前面说过,可以给字体添加多个Span,该方法就是移除绑定的Span用的。

你可能感兴趣的:(SpannableString复合文本)