Android SpannableString 的使用 - chuwuwang/ReadingNote GitHub Wiki
对文本设置不同的样式。
- 使用多个TextView进行拼接
- 使用HTML.fromHtml()
- 使用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
}
}