关于Span的flags说明

关于Span的flags说明

##背景
很多时候希望,文本的不同部分有不同的表示方式,比如某些字符串为红色、某些字符串加粗、添加背景色等等。如图所示:
在这里插入图片描述
要实现这种效果,通常使用SpannableString类或SpannableStringBuilder类。两者都要用到setSpan(Object what,int start,int end,int flags)方法,关于最后一个参数的含义就是本文章的主题。
##flag的种类

  • Spanned.SPAN_INCLUSIVE_INCLUSIVE
  • Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
  • Spanned.SPAN_INCLUSIVE_EXCLUSIVE
  • Spanned.SPAN_EXCLUSIVE_EXCLUSIVE

无非就是INCLUSIVE和EXCLUSIVE的排列组合。排除的是什么,包含的又是什么?

首先看个SpannableString的例子:

SpannableString spannableString=new SpannableString("0123456");
spannableString.setSpan(new ForegroundColorSpan(Color.RED),1,5,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setText(spannableString);

运行的效果如图:
在这里插入图片描述

注意:更改flag为其他值结果都是一样的

如你所见,flags对于不变字符串是没有任何意义的。

再来看看SpannableStringBuilder的例子:

SpannableStringBuilder builder=new SpannableStringBuilder("0123456");
ForegroundColorSpan foregroundColorSpan=new ForegroundColorSpan(Color.RED);
builder.setSpan(foregroundColorSpan,1,5,Spanned.SPAN_INCLUSIVE_INCLUSIVE);
builder.insert(5,"xx");
builder.insert(1,"xx");
mTextView.setText(builder);

运行效果如图:
在这里插入图片描述

可以看到,索引为1和5的位置插入的"xx"都是红色的,说明flag起作用了,foregroundColorSpan的作用范围为[1,5]。

吧Spanned.SPAN_INCLUSIVE_INCLUSIVE换成Spanned.SPAN_EXCLUSIVE_INCLUSIVE的效果:
在这里插入图片描述

很显然foregroundColorSpan的作用范围为(1,5]。

如你所见,对于可变字符串flags决定了作用的区间。

##总结

  1. flags只对可变字符串起作用,而且是在发生改变时起作用。
  2. 对于可变字符串,flags决定了作用的区间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值