SpannableStringBuilder设置同一TexView不同显示效果

116 阅读1分钟

效果

1700545327056.png

省流

SpnnableStringBuilder span = new SpannableStringBuilder(“只因你太美baby只因你实在太美baby”);

//startIndex-开始索引下标 endIndex-结束索引下标
//字号大小(相对原本AppCompatTextView字号大小)
span.setSpan(new RelativeSizeSpan(0.75f),startIndex,endIndex,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//字体颜色
span.setSpan(new ForegroundColorSpan(Color.parseColor("#999999")),startIndex,endIndex,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//字号加粗
span.setSpan(new StyleSpan(Typeface.BOLD),startIndex,endIndex,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

废流

同一TextView设置不同的文本效果(字号大小,字体颜色,字体风格等),SpannableStringBuilder方便且灵活。

public void setSpan(Object what, int start, int end, int flags) {}

我们来看一下setSpan()方法的具体参数:

1.what:

样式对象:RelativeSizeSpan(只有相对尺寸设置,这意味这你必须设置原本的TextView尺寸大小) StyleSpan(字体风格设置,Typeface.BOLD加粗,Typeface.NORMAl正常) ForegroundColorSpan(字体颜色)

2.start:

开始应用样式的字符串索引下标,包含该字符串本身 例如:“只因你太美baby”,若sart = 0,end =2,则应用样式的字符串只有“只因”。

3.end:

结束应用样式的字符串索引下标,不包含该字符串本身 例如:“只因你太美baby”,若sart = 3,end =5,用样式的字符串只有“太美”。

4.flags:

常用的flags:

  1. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE:前后插入文本,都不应用新的样式
  2. Spanned.SPAN_EXCLUSIVE_INCLUSIVE:前面插入文本不应用新样式,后面插入文本应用新样式
  3. Spanned.SPAN_INCLUSIVE_EXCLUSIVE:前面插入文本应用新样式,后面插入文本不应用新样式
  4. Spanned.SPAN_INCLUSIVE_INCLUSIVE:前后插入文本,都应用新的样式