前言:最近在项目学习的过程当中,发现SpannableStringBuilder类,而且该类能对TextView的内容进行自定义文字大小、颜色、加下划线等功能,于是特意对该类的相关知识进行研究安全
SpannableString
、SpannableStringBuilder
与String
的关联首先SpannableString
与SpannableStringBuilder
与String相似,也是用来存储字符串,但它俩的特殊就在于SetSpan()
方法,能让存储在其中的String添加各类格式或者样式(Span
),让原来的String以不一样的样式显式出来,如在原String
上加下划线、加背景、改变字体颜色等等。markdown
SpannableString
、SpannableStringBuilder
区别由于SpannableString
和SpannableStringBuilder
的区别与String
和StringBuilder
相似,于是下表将四个类放在一块儿进行对比app
表一:四个CharSequence的子类对比oop
类 | String | StringBuilder | SpannableString | SpannableStringBuilder |
---|---|---|---|---|
继承接口 | CharSequence | CharSequence | CharSequence | CharSequence |
是否可变 | 不可变 | 可变 | 不可变 | 可变 |
是否线程安全 | 是 | 否 | 是 | 否 |
拼接append() |
否 | 是 | 否 | 是 |
SetSpan()
方法void setSpan(Object what, int start, int end, int flags)
学习
方法的做用:给SpannableString
或SpannableStringBuilder
特定范围的字符串设定Span
式样,能够设置多个(好比同时加下划线和改变字体颜色等),Flags
参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动做,便是否对新插入的字符应用一样的样式。字体
setSpan() 方法的参数 |
Object what | int start | int end | int 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 ui
图片来源:String、SpannableString与SpannableStringBuilder却别和使用()spa