Android 富文本TextView

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
    }

}

你可能感兴趣的:(Android 富文本TextView)