SpannableStringBuilder 笔记
在学习富文本的过程中发现了这个知识点。SpannableStringBuilder
实现了CharSequence
接口,用法类似StringBuilder
。可以为其包含的字符串设置样式。在设计自定义Label时会很实用。
需要注意的是,虽然其可以直接作为参数放入TextView中,不过由于Canvas
并不适配这个类,所以在其中使用这个类等同于使用普通的字符串。
关键方法
-
void setSpan(Object what, int start, int end, int flags)
-
SpannableStringBuilder append(CharSequence text, Object what, int flags)
实际上两个方法类似,都需要一个参数what
和flags
。方法1的剩余参数分别为需要设置的字符起点、终点。这没啥好说的,跟substring
的那两个参数一样。方法2就不必说了,现在说说共有的两个参数
what
是一个Span
类型的参数,用于确定现在的样式。是整个方法的关键。flags
参数用于确定样式的作用范围。该参数需求以下四个常量值:
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:仅仅作用于当前选中范围内
insert()
的字符串 - Spannable.SPAN_EXCLUSIVE_INCLUSIVE:作用于当前选中字符串之后
insert()
的字符串 - Spannable.SPAN_INCLUSIVE_EXCLUSIVE:作用于当前选中的字符串之前
insert()
的字符串 - Spannable.SPAN_INCLUSIVE_INCLUSIVE:无论前后都有效
注意,该参数仅对使用insert()
方法插入的字符串有效,且插入的位置必须紧贴选中的字符串。否则不会有效果
参数 what
参数what
接收一个CharacterStyle
的子类。一般常用如下几个实体类
ForegroundColorSpan(字体颜色)
可以接受一个颜色参数,用于改变字体颜色
BackgroundColorSpan(背景颜色)
可以接受一个颜色参数,用于改变背景颜色
AbsoluteSizeSpan(字体大小)
接受一个int参数和一个布尔值,前者为尺寸,后者用于判断单位是否是dip。true为dip,false则为px。该参数默认为false
StyleSpan(字体样式)
接受常量参数,如Typeface.BOLD_ITALIC
。用于确定字体样式
UnderlineSpan(下划线)
无参构造器,加下划线
多样式
可以为一组字符串设置多种样式,只需要多次set不同的Span即可。
注意,若set同种样式,后添加的span会覆盖前者