SpannableString和SpannableStringBuilder总结

866 阅读2分钟

前言:最近在项目学习的过程中,发现SpannableStringBuilder类,并且该类能对TextView的内容进行自定义文字大小、颜色、加下划线等功能,因而特地对该类的相关知识进行研究

1. SpannableStringSpannableStringBuilderString的关联

首先SpannableStringSpannableStringBuilder与String类似,也是用来存储字符串,但它俩的特殊就在于SetSpan()方法,能让存储在其中的String添加各种格式或者样式(Span),让原来的String以不同的样式显式出来,如在原String上加下划线、加背景、改变字体颜色等等。

2. SpannableStringSpannableStringBuilder区别

因为SpannableStringSpannableStringBuilder的区别与StringStringBuilder类似,因而下表将四个类放在一起进行对比

表一:四个CharSequence的子类对比

StringStringBuilderSpannableStringSpannableStringBuilder
继承接口CharSequenceCharSequenceCharSequenceCharSequence
是否可变不可变可变不可变可变
是否线程安全
拼接append()

SpannableString与SpannableStringBuilder的联系

3. SetSpan()方法

void setSpan(Object what, int start, int end, int flags)

方法的作用:给SpannableStringSpannableStringBuilder特定范围的字符串设定Span式样,可以设置多个(比如同时加下划线和改变字体颜色等),Flags参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动作,即是否对新插入的字符应用同样的样式。

setSpan()方法的参数Object whatint startint endint flags
含义对应的各种Span开始应用指定Span的位置,索引从0开始结束应用指定Span的位置,特效不包括该位置对标记范围前后插入的字体是否使用新式样
各参数的具体示例val span = new ForegroundColorSpan(Color.BLUE);字体颜色————————————————Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括。即仅在指定范围的前后插入新字符都不会应用新样式
val span = new BackgroundColorSpan(Color.YELLOW);:字体背景颜色Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括。即仅在指定范围的后插入新字符时会应用新样式
span = new AbsoluteSizeSpan(16);:字体大小Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括
span = new StyleSpan(Typeface.BOLD_ITALIC);:字体粗体、斜体Spannable.SPAN_INCLUSIVE_INCLUSIVE:前后面都包括
span = new StrikethroughSpan();:字体删除线
span = new UnderlineSpan();:字体下划线
span = new ImageSpan(Drawable对象, ImageSpan.ALIGN_BASELINE); :字体下划线

参考资料: SpannableString与SpannableStringBuilder

图片来源:String、SpannableString与SpannableStringBuilder却别和使用()