简介:
SpannableString的简介:
SpannableString其实和String一样,都是一种字符串类型,SpannableString可以直接作为TextView的显示文本,
不同的是SpannableString可以通过使用其方法setSpan方法实现字符串各种形式风格的显示,重要的是可以指定设置的区间,也就是为字符串指定下标区间内的子字符串设置格式。
setSpan(Object what, int start, int end, int flags)方法需要用户输入四个参数,
1.what表示设置的格式是什么,可以是前景色、背景色也可以是可点击的文本等等,
2.start表示需要设置格式的子字符串的起始下标,
3.同理end表示终了下标
4.flags属性就有意思了,共有四种属性:
Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标
Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了下标,同时包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终了下标,但都不包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终了下标,包括终了下标
SpannableString的setSpan()方法可以同时使用多个,实现多种效果叠加。
效果:
功能:
- 变颜色
- 上标
- 可点击
- X轴变化
- 模糊效果
- 删除线
- 下划线效果
- 文本字体绝对的大小
- 文字与图片结合
- 倾斜与加粗
- 文字字体
- 超文本链接
- 下标
实现 :
实现于TextView:
//变颜色
val spannableString1 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString1.setSpan(ForegroundColorSpan(Color.BLUE),1,7,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableString1.setSpan(BackgroundColorSpan((Color.GRAY)),0,spannableString1.length,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text1.text=spannableString1
//上标
val spannableString2 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString2.setSpan(SuperscriptSpan(), 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text2.setText(spannableString2)
//可点击
val spannableString3 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
}
override fun updateDrawState(ds: TextPaint) {
//去掉可点击文字的下划线
ds.isUnderlineText = false
}
}
//文本可点击,有点击事件
spannableString3.setSpan(clickableSpan, 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
// 设置此方法后,点击事件才能生效
main_text3.setMovementMethod(LinkMovementMethod.getInstance())
main_text3.setText(spannableString3)
//X轴变化
val spannableString4 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString4.setSpan(ScaleXSpan(6.0f), 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text4.setText(spannableString4)
//模糊效果
val spannableString5 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
//BlurMaskFilter模糊
var filter:MaskFilter = BlurMaskFilter(4.0f,BlurMaskFilter.Blur.OUTER);
var maskFilterSpan: MaskFilterSpan = MaskFilterSpan(filter);
spannableString5.setSpan(maskFilterSpan,0,4,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
main_text5.setText(spannableString5);
//删除线
val spannableString6 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString6.setSpan(StrikethroughSpan(), 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text6.setText(spannableString6)
//下划线效果
val spannableString7 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString7.setSpan(UnderlineSpan(), 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text7.setText(spannableString7)
//文本字体绝对的大小
val spannableString8 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString8.setSpan(AbsoluteSizeSpan(30, true), 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text8.setText(spannableString8)
//文字与图片结合
val spannableString9 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString9.setSpan( object : DynamicDrawableSpan() {
override fun getDrawable(): Drawable {
val drawable = resources.getDrawable(R.mipmap.ic_launcher)
drawable.setBounds(0, 0, 50, 50)
return drawable
}
}, 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text9.setText(spannableString9)
//倾斜与加粗
val spannableString10 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString10.setSpan( StyleSpan(Typeface.BOLD_ITALIC), 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text10.setText(spannableString10)
//文字字体
val spannableString11 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString11.setSpan( TypefaceSpan("Arial"), 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text11.setText(spannableString11)
//超文本链接
val spannableString12 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString12.setSpan(URLSpan("https://blog.youkuaiyun.com/feng___chen"), 7, spannableString12.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text12.setMovementMethod(LinkMovementMethod())
main_text12.setText(spannableString12)
//下标
val spannableString13 = SpannableString("优快云风尘:https://blog.youkuaiyun.com/feng___chen")
spannableString13.setSpan(SubscriptSpan(), 4, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
main_text13.setText(spannableString13)