Android 富文本TextView
项目中总会遇到一段文字中,部分文字颜色不同,字体大小不同,使用 CharacterStyle
的一系列的子类可以完美实现该效果。
SpannableStringBuilder
主要通过使用 setSpan
方法来改变文本样式。
- start:指定 span 的开始位置
- end:指定 span 的结束位置(开区间)
- flags:对应插入新文本时是否应用该样式
- what:对应的各种样式,就是要改变文字的什么属性
- BackgroundColorSpan:文本背景色
- ForegroundColorSpan:文本颜色
- StrikethroughSpan:删除线
- 。。。。等等
准备封装一个富文本 TextView。
package com.ecoproaims.handheldpesticidemanagement.utils.widget
import android.content.Context
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.style.CharacterStyle
import android.util.AttributeSet
import android.widget.TextView
/**
* create by zyf on 2019/1/10 3:53 PM
*/
class RichText : TextView {
constructor(context: Context) : this(context, null) {
}
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) {
}
constructor(context: Context, attrs: AttributeSet?, defstyleAttr: Int) : super(context, attrs, defstyleAttr) {
}
fun setSpan(beginIndex: Int, endIndex: Int, vararg style: CharacterStyle) {
val builder: SpannableStringBuilder = SpannableStringBuilder(text)
style.forEach {
builder.setSpan(it, beginIndex, endIndex, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
}
text = builder
}
fun setSpan(mText: String, beginIndex: Int, endIndex: Int, vararg style: CharacterStyle) {
val builder: SpannableStringBuilder = SpannableStringBuilder(mText)
style.forEach {
builder.setSpan(it, beginIndex, endIndex, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
}
text = builder
}
}