前言
又是给自己看系列
SpannableString可以在字符序列基础上对指定的字符进行修饰,在日常开发过程中可以对TextView进行修饰,如一段完整文字中,对当中的词或句添加,粗体、点击事件、颜色、下划线等等。
SpannableString
主要代码
SpannableString().setSpan(what:Object,start:Int,end:Int,flags:Int)
what
此参数用来设置,用来修饰的Span
常用的Span
ForegroundColorSpan
用来设置前景色,也可以理解理解为,给文字上色。颜色值需要为ColorInt,可以使用Color.parseColor(color:String) 或者 ResourseCompt.getColor(resoures:Resourse,id:Int,theme:Int)两种方法获得ColorInt
- 例
val ss = SpannableString("一段文字")
ss.setSpan(ForegroundColorSpan(Color.parseColor("#000000")),2,ss.size(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
textview.setText(ss)
BackgroundColorSpan
顾名思义,用来设置背景色,同样是需要传入ColorInt,不做实例了。
ClickableSpan
点击修饰。注意:添加此Span,需要被修饰的textview,setMovementMethod(LinkMovementMehtod.getInstance()),否则点击事件不会被下发到修饰的段落上;ClickableSpan默认会在文字上加上下划线,如果不希望有下划线需要在updateDrawState中 setUnderlineText(false)
- 例
val ss = SpannableString("一段文字")
val clickableSpan = object: ClickableSpan(){
override fun onClick(weiget:View){
// TODO 点击
}
override fun upadteDrawState(paint:TextPaint){
paint.setUnderlineText(false)
}
}
ss.setSpan(clickableSpan,2,ss.size(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
textview.setMovementMethod(LinkMovementMehtod.getInstance())
textview.setText(ss)
StyleSpan
用来设置文字样式,如斜体、粗体。需要传入Typeface
Typeface
// 正常
public static final int NORMAL = 0;
// 粗体
public static final int BOLD = 1;
// 斜体
public static final int ITALIC = 2;
// 斜体 + 粗体
public static final int BOLD_ITALIC = 3;
- 例
val ss = SpannableString("1234")
val bold = StyleSpan(Typeface.BOLD);
ss.setSpan(bold,2,ss.size(),Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
textview.setText(ss)
后续使用中添加其他Span....
flags
解释一下,
INCLUSIVE和EXCLUSIVE。INCLUSIVE*(包括的)相当于闭区间[],EXCLUSIVE(单选、排它)相当于开区间(),如此理解可以方便选择对应的flag
- SPAN_INCLUSIVE_EXCLUSIVE:包括开始下标,但不包括结束下标
- SPAN_EXCLUSIVE_INCLUSIVE:不包括开始下标,但包括结束下标
- SPAN_INCLUSIVE_INCLUSIVE:既包括开始下标,又包括结束下标
- SPAN_EXCLUSIVE_EXCLUSIVE:不包括开始下标,也不包括结束下标