在Android界面展示信息时,有时我们需要相近或相邻的文字显示不同的文本格式,这时该怎么办呢?我们有至少两种办法:
添加多个控件在控件修改局部文本
今天我们来谈一下如何在控件中修改局部文本。
1、SpannableStringBuilder类
我们要用到SpannableStringBuilder这个类,这是一个内容和标记都可以更改的文本类,它与SpannableString的关系类似于StringBuilder和String的关系,比如前者可以利用append方法去动态改变相应对象的内容。
2、Span方法
SpannableStringBuilder的setSpan()方法: void setSpan(Object what,int start,int end,int flags) 函数作用:可以给SpannableStringBuilder设置特殊的文本样式,比如文字颜色、背景颜色、超链接、样式、删除线、下划线等。 参数说明: 第一个参数what:样式span (测量 测绘) 第二、第三个参数start-end:样式改变的起始和终止索引(从0开始)。需要注意的是1,3表示的是[1,3)的意思,即从索引1开始,在索引3之前停止 第四个参数flags:是否影响前后插入的文本,EXCLUSIVE和INCLUSIVE分别表示不影响和影响,两两组合可以形成4种参数,分别为:
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 前后均无影响Spannable.SPAN_EXCLUSIVE_INCLUSIVE 只后影响Spannable.SPAN_INCLUSIVE_EXCLUSIVE 只前影响Spannable.SPAN_INCLUSIVE_INCLUSIVE 前后均影响
3、举例说明
SpannableStringBuilder builder
//设置文字颜色Span
ForegroundColorSpan Span1 = new ForegroundColorSpan(Color
.RED)
//设置背景颜色Span
BackgroundColorSpan Span2 = new BackgroundColorSpan(Color
.YELLOW)
//设置超链接Span
URLSpan Span3 = new URLSpan(
"wwww.baidu.com")
//设置文本样式之字体Span
AbsoluteSizeSpan Span4 = new AbsoluteSizeSpan(
80)
//设置删除线Span
StrikethroughSpan Span5 = new StrikethroughSpan()
//设置下划线Span
UnderlineSpan Span6 = new UnderlineSpan()
builder
.setSpan(Span1,
0,
1, Spanned
.SPAN_EXCLUSIVE_EXCLUSIVE)
builder
.setSpan(Span2,
1,
2, Spanned
.SPAN_EXCLUSIVE_EXCLUSIVE)
builder
.setSpan(Span3,
2,
3, Spanned
.SPAN_EXCLUSIVE_EXCLUSIVE)
builder
.setSpan(Span4,
3,
4, Spanned
.SPAN_EXCLUSIVE_EXCLUSIVE)
builder
.setSpan(Span5,
4,
5, Spanned
.SPAN_EXCLUSIVE_EXCLUSIVE)
builder
.setSpan(Span6,
5,
6, Spanned
.SPAN_EXCLUSIVE_EXCLUSIVE)
mTextView
.setText(builder)
效果图如下:
当然,还有更多可选的Span类型,具体的大家参考官方API吧~