TextView和EditText都可以设置纯文本的字符串,但是当一个字符串中需要设置不同的文字格式或者插入图片时,我们不可能去设置多个TextView+ImageView来实现,那样要累死了。(话说,刚开始我就是动态添加四个TextView来实现一个效果,好囧)。我们知道,方法setText(CharSequence text)中接收的是CharSequence。而SpannableString和SpannableStringBuilder是其实现类,是可以直接赋值的,并且,两者的setSpan()方法可以设置一些格式对象(例如字体大小,下划线,替换为图片,等),这就可以实现富文本了。
TextView和EditText灵活设置文字格式
TextView和EditText都可以设置纯文本的字符串,但是当一个字符串中需要设置不同的文字格式或者插入图片时,我们不可能去设置多个TextView+ImageView来实现,那样要累死了。(话说,刚开始我就是动态添加四个TextView来实现一个效果,好囧)。我们知道,方法setText(CharSequence text)中接收的是CharSequence。而SpannableString和SpannableStringBuilder是其实现类,是可以直接赋值的,并且,两者的setSpan()方法可以设置一些格式对象(例如字体大小,下划线,替换为图片,等),这就可以实现富文本了。
接口 Spannable—>Spanned—>CharSequence
实现子类:
|–Editable
|–SpannableString
|–SpannableStringBuilder(–>Editale)
Spannable中定义了抽象方法:setSpan(Object what, int start, int end, int flags)和removeSpan(Object what)。这两个方法实现了对字符串的灵活编辑。
可以实现一下效果:
各Span的简单应用
以下是一些常用到的一些Span:
- BackgroundColorSpan
- ForegroundColorSpan
- StyleSpan
- TypefaceSpan
- ImageSpan
- URLSpan
- UnderlineSpan
- StrikethroughSpan(删除线)
具体没啥说的,见名知意,直接看代码:
|
|
以上是SpannableString的应用,还有一个SpannableStringBuilder,他们两个区别就是,后者可以通过append()方法动态添加文本。其他用法相同。如下:
|
|
利用ClickableSpan实现可点击文本
在项目中,点赞人名的依次排列并可点击的场景是很常用的,具体实现如下:
|
|
URLSpan用法
URLSpan urlSpan = new URLSpan(“tel:10086”);
URLSpan默认都设置了ClickableSpan,都是可点击的。
“tel:”:电话
“mailto:”:邮件
“http:”:网址
“sms:”:短信
“geo:”:地图(需要fq)
|
|