SpannableStringBuilder、SpannableString设置文字样式、设置文案中部分文字样式(颜色、字体样式、点击事件)

  • SpannableStringBuilder和SpannableString区别:类似于String和StringBuilder一样
  • 部分文字添加点击事件以及文字样式修改
/**使用SpannableStringBuilder*/
val str = "今天晚上下雨啦!"
val value1 = "今天"
val start1 =  str.indexOf(value1)
val end1 = start1 + value1.length
val value = "下雨"
val start =  str.indexOf(value)
val end = start + value.length
val spannableBuild = SpannableStringBuilder(str)
//指定value添加点击事件
spannableBuild.setSpan(object: ClickableSpan(){
    override fun onClick(widget: View) {
        Toast.makeText(this@MainActivity, value1, Toast.LENGTH_SHORT).show()
    }

    override fun updateDrawState(ds: TextPaint) {
        super.updateDrawState(ds)
        ds.isUnderlineText = false
    }
},start1, end1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuild.setSpan(object: ClickableSpan(){
    override fun onClick(widget: View) {
        Toast.makeText(this@MainActivity, value, Toast.LENGTH_SHORT).show()
    }
    
    override fun updateDrawState(ds: TextPaint) {
        super.updateDrawState(ds)
        ds.isUnderlineText = false
    }
},start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//设置字体颜色
val spanColor1 = ForegroundColorSpan(resources.getColor(R.color.purple_700, null))
val spanColor2 = ForegroundColorSpan(resources.getColor(R.color.purple_700, null))
spannableBuild.setSpan(spanColor1,start1, end1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuild.setSpan(spanColor2,start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//value斜体加粗 --- Typeface.BOLD:加粗;Typeface.BOLD_ITALIC:斜体加粗
spannableBuild.setSpan(StyleSpan(Typeface.BOLD_ITALIC), start1, end1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuild.setSpan(StyleSpan(Typeface.BOLD_ITALIC), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//设置字体大小
spannableBuild.setSpan(AbsoluteSizeSpan(resources.getDimensionPixelSize(R.dimen.dp_30)),start1,end1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuild.setSpan(AbsoluteSizeSpan(resources.getDimensionPixelSize(R.dimen.dp_30)),start,end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
bind.tv02.text = spannableBuild
bind.tv02.movementMethod = LinkMovementMethod.getInstance()
//注意:如果点击事件和字体样式同时添加,点击事件顺序在前,字体样式顺序在后
//注意:添加点击事件时,需对TextView添加:tv.movementMethod = LinkMovementMethod.getInstance()



/**使用SpannableStringBuilder+SpannableString*/
val value = "下雨"
val spannableBuild = SpannableStringBuilder()
val spannableString = SpannableString("下雨")
//指定value添加点击事件
spannableString.setSpan(object: ClickableSpan(){
    override fun onClick(widget: View) {
        Toast.makeText(this@MainActivity, value, Toast.LENGTH_SHORT).show()
    }

    override fun updateDrawState(ds: TextPaint) {
        super.updateDrawState(ds)
        ds.isUnderlineText = false
    }
},0, value.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//设置字体颜色
val spanColor = ForegroundColorSpan(resources.getColor(R.color.purple_700, null))
spannableString.setSpan(spanColor,0, value.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//value斜体加粗 --- Typeface.BOLD:加粗;Typeface.BOLD_ITALIC:斜体加粗
spannableString.setSpan(StyleSpan(Typeface.BOLD_ITALIC), 0, value.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//设置字体大小
spannableString.setSpan(AbsoluteSizeSpan(resources.getDimensionPixelSize(R.dimen.dp_30)),0,value.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuild.append("今天晚上").append(spannableString).append("啦!")
bind.tv02.text = spannableBuild
bind.tv02.movementMethod = LinkMovementMethod.getInstance()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值