SpannableString和SpannableStringBuilder总结

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

1. SpannableStringSpannableStringBuilderString的关联

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

2. SpannableStringSpannableStringBuilder区别

由于SpannableStringSpannableStringBuilder的区别与StringStringBuilder相似,于是下表将四个类放在一块儿进行对比app

表一:四个CharSequence的子类对比oop

String StringBuilder SpannableString SpannableStringBuilder
继承接口 CharSequence CharSequence CharSequence CharSequence
是否可变 不可变 可变 不可变 可变
是否线程安全
拼接append()

SpannableString与SpannableStringBuilder的联系

3. SetSpan()方法

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

方法的做用:给SpannableStringSpannableStringBuilder特定范围的字符串设定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

相关文章
相关标签/搜索