- SpannableStringBuilder和SpannableString区别:类似于String和StringBuilder一样
- 部分文字添加点击事件以及文字样式修改
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()
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()