Android 富文本TextView
項(xiàng)目中總會(huì)遇到一段文字中,部分文字顏色不同恐锦,字體大小不同融击,使用 CharacterStyle
的一系列的子類(lèi)可以完美實(shí)現(xiàn)該效果。
SpannableStringBuilder
主要通過(guò)使用 setSpan
方法來(lái)改變文本樣式吓歇。
- start:指定 span 的開(kāi)始位置
- end:指定 span 的結(jié)束位置(開(kāi)區(qū)間)
- flags:對(duì)應(yīng)插入新文本時(shí)是否應(yīng)用該樣式
- what:對(duì)應(yīng)的各種樣式孽水,就是要改變文字的什么屬性
- BackgroundColorSpan:文本背景色
- ForegroundColorSpan:文本顏色
- StrikethroughSpan:刪除線
- 。城看。女气。。等等
準(zhǔn)備封裝一個(gè)富文本 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
}
}