SpannableString及其相关类的使用

一、继承关系

继承关系
由于TextView.setText(CharSequence text)接收参数类型为CharSequence,所以他们都能作为setText的参数使用。

二、主要方法

1.setSpan(Object what, int start, int end, int flags)

参数含义:

  • what 各种Span样式。
  • start 改变样式的字符起点,就是要改的第一个下标。
  • end 改变样式的字符终点,就是要改的最后一个下标的下一个下标。
    通常end = start + length。
  • flags 标记位,用于标记修改字符串前后的字符的变化规则。
  • 注意这里中文一个字算一个字符。

what参数:

  • 常用类型

    • ForegroundColorSpan 文本颜色
    • BackgroundColorSpan 文本背景色
    • URLSpan 文本超链接
    • UnderlineSpan 下划线
    • StrikethroughSpan 删除线
    • ImageSpan 图片
    • DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。
    • ClickableSpan 点击事件
  • 其他类型

    • StyleSpan 字体样式:粗体、斜体等
    • MaskFilterSpan 修饰效果,如浮雕模糊(BlurMaskFilter)
    • RasterizerSpan 光栅效果
    • TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
    • TypefaceSpan 文本字体
    • SuggestionSpan 相当于占位符
    • AbsoluteSizeSpan 文本字体(绝对大小)
    • RelativeSizeSpan 相对大小(文本字体)
    • ScaleXSpan 基于x轴缩放
    • SubscriptSpan 下标(数学公式会用到)
    • SuperscriptSpan 上标(数学公式会用到)

flags参数:

  • Spannable.SPAN_EXCLUSIVE_INCLUSIVE
    新增前插字符不应用效果,新增后插字符应用效果。

  • Spannable.SPAN_INCLUSIVE_EXCLUSIVE
    新增前插字符应用效果,新增后插字符不应用效果。

  • Spannable.SPAN_INCUJSIVE_INCLUSIVE
    前后新增的字符都应用效果。

  • Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
    前后新增的字符都不应用效果。

三、图解参数

1.start、end、flags参数图解

图解参数

2.what参数图解

由于种类过多就不做了。其实没必要做,你只需要知道你想做什么效果,然后点进该类源码,查看构造函数和其公有方法,自然就了解这个类有什么用了。

了解一个类有什么功能的捷径就是查看源码,本篇文章仅辅助你去理解他们。