SpannableStringBuilder的使用/TextView修改部分字体颜色

主要的方法

SpannableStringBuilderSpannableString主要通过使用setSpan(Object what, int start, int end, int flags)改变文本样式。
对应的参数:

  • start: 指定Span的开始位置
  • end: 指定Span的结束位置,并不包括这个位置。
  • flags:取值有如下四个
  • Spannable.SPAN_EXCLUSIVE_INCLUSIVE:在 Span前面输入的字符不应用 Span的效果,在后面输入的字符应用Span效果。
  • Spannable.SPAN_INCLUSIVE_EXCLUSIVE:在 Span前面输入的字符应用 Span 的效果,在后面输入的字符不应用Span效果。
  • Spannable.SPAN_INCUJSIVE_INCLUSIVE:在 Span前后输入的字符都应用 Span 的效果。
  • Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括。
  • what: 对应的各种Span,不同的Span对应不同的样式。已知的可用类有:
  • BackgroundColorSpan : 文本背景色
  • ForegroundColorSpan : 文本颜色
  • MaskFilterSpan : 修饰效果,如模糊(BlurMaskFilter)浮雕
  • RasterizerSpan : 光栅效果
  • StrikethroughSpan : 删除线
  • SuggestionSpan : 相当于占位符
  • UnderlineSpan : 下划线
  • AbsoluteSizeSpan : 文本字体(绝对大小)
  • DynamicDrawableSpan : 设置图片,基于文本基线或底部对齐。
  • ImageSpan : 图片
  • RelativeSizeSpan : 相对大小(文本字体)
  • ScaleXSpan : 基于x轴缩放
  • StyleSpan : 字体样式:粗体、斜体等
  • SubscriptSpan : 下标(数学公式会用到)
  • SuperscriptSpan : 上标(数学公式会用到)
  • TextAppearanceSpan : 文本外貌(包括字体、大小、样式和颜色)
  • TypefaceSpan : 文本字体
  • URLSpan : 文本超链接
  • ClickableSpan : 点击事件

注意事项 

1.在设置多个颜色的位置时,颜色值对象不能一样,否则只会最后一个生效

val spannableStringBuilder = SpannableStringBuilder()
        val termForegroundColorSpan = ForegroundColorSpan(Color.parseColor("#FFF4DD81"))
        val termForegroundColorSpan1 = ForegroundColorSpan(Color.parseColor("#FFF4DD81"))
        val tv1 = "已有"
        spannableStringBuilder.append(tv1)
        spannableStringBuilder.append(redCount)
        val tv2 = "红包可兑换"
        spannableStringBuilder.append(tv2)
        spannableStringBuilder.append(redAbout)
        spannableStringBuilder.append("元")

        spannableStringBuilder.setSpan(
            termForegroundColorSpan,
            tv1.length + redCount.length + tv2.length,
            tv1.length + redCount.length + tv2.length + redAbout.length,
            Spanned.SPAN_INCLUSIVE_INCLUSIVE
        )
        spannableStringBuilder.setSpan(
            termForegroundColorSpan1,
            tv1.length,
            tv1.length + redCount.length,
            Spanned.SPAN_INCLUSIVE_INCLUSIVE
        )
        tvMsg.text = spannableStringBuilder

猜你喜欢

转载自blog.csdn.net/Steve_XiaoHai/article/details/132863163
今日推荐