Android SpannableString 的使用 - chuwuwang/ReadingNote GitHub Wiki

对文本设置不同的样式。

  1. 使用多个TextView进行拼接
  2. 使用HTML.fromHtml()
  3. 使用SpannableString或者SpannableStringBuilder

SpannableString和SpannableStringBuilder的关系类似于String和StringBuilder。前者不可变,后者可变。所以两者的使用方法基本相同。

主要方法

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

}

what里传入的参数是Span类。

start和end传入的是要设置style的起始和终止位置,这里需要注意的是end不包括最后一位。

flag是具体的策略。

  • BackgroundColorSpan 设置文本背景颜色。参数传入一个int类型的颜色。

  • ForegroundColorSpan 设置文本颜色。参数传入一个int类型的颜色。

  • ClickableSpan 设置点击事件。需要继承这个类重写onClick方法。

  • StrikethroughSpan 设置删除线效果。

  • UnderlineSpan 设置下划线效果。

  • AbsoluteSizeSpan 设置文字的绝对大小。第一个参数为字体大小,只有这一个参数时,单位为px。第二个参数dip,默认为false,设为true时,第一个参数size的单位是dp。

  • RelativeSizeSpan 设置文字的相对大小。

  • StyleSpan 设置文字粗体、斜体。Typeface.BOLD为粗体,Typeface.ITALIC为斜体,Typeface.BOLD_ITALIC为粗斜体。

  • ImageSpan 设置图片。将[start, end)范围内的文字替换成参数传入的图片。

  • MaskFilterSpan 修饰效果。如模糊(BlurMaskFilter)浮雕。

  • RasterizerSpan 光栅效果。

  • SuggestionSpan 相当于占位符。

  • DynamicDrawableSpan 设置图片。基于文本基线或底部对齐。

  • ScaleXSpan 基于x轴缩放。

  • SubscriptSpan 下标(数学公式会用到)

  • SuperscriptSpan 上标(数学公式会用到)

  • TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)。

  • TypefaceSpan 文本字体。

  • URLSpan 文本超链接。

去除点击事件的下划线

   private val clickableSpan = object : ClickableSpan() {

        override fun onClick(v: View) {
            toast("hi android")
        }

        override fun updateDrawState(textPaint: TextPaint) {
            super.updateDrawState(textPaint)
            // link的颜色
            textPaint.linkColor = Color.BLUE
            // 下划线的宽度
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                textPaint.underlineThickness = 1f
            }
            // 下划线有效
            textPaint.isUnderlineText = true
        }

    }