SpannableString其实和String一样,都是一种字符串类型,同样TextView也可以直接设置SpannableString作为显示文本,不同的是SpannableString可以通过使用其方法setSpan方法实现字符串各种形式风格的显示,重要的是可以指定设置的区间,也就是为字符串指定下标区间内的子字符串设置格式。
setSpan(Object what, int start, int end, int flags)方法需要用户输入四个参数,what
表示设置的格式是什么,可以是前景色、背景色也可以是可点击的文本等等,start
表示需要设置格式的子字符串的起始下标,同理end
表示终了下标,flags
属性就有意思了,共有四种属性:
// new AbsoluteSizeSpan(inteDp, true) 字号绝对值 // new RelativeSizeSpan(0.5f) 字号相对值 // new ScaleXSpan(2.0f) 设置字体宽度大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍 // new TypefaceSpan("monospace") 字体 // // new ForegroundColorSpan(Color.MAGENTA) 前景色 // new BackgroundColorSpan(Color.CYAN) 背景色 // // new StyleSpan(android.graphics.Typeface.NORMAL) 正常 // new StyleSpan(android.graphics.Typeface.BOLD) 粗体 // new StyleSpan(android.graphics.Typeface.ITALIC) 斜体 // new StyleSpan(android.graphics.Typeface.BOLD_ITALIC) 粗斜 // // new UnderlineSpan() 下划线 // new StrikethroughSpan() 删除线 // new SubscriptSpan() 上角标 // new SuperscriptSpan() 小角标 // // 超链接:需要添加setMovementMethod方法附加响应 // new URLSpan("tel:4155551212") 电话 // new URLSpan("mailto:webmaster@google.com") 邮件 // new URLSpan("http://www.baidu.com") 网页 // new URLSpan("sms:4155551212") 短信 // new URLSpan("mms:4155551212") 彩信 // new URLSpan("geo:38.899533,-77.036476") 地图 // // new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN) 项目符号 // new ImageSpan(drawable) 图片 // // Spanned.SPAN_*用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果 // Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、 // Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、 // Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、 // Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)
更多详情,可以查看://https://www.jianshu.com/p/84067ad289d2