- 将一段文字中指定range的文字添加颜色和点击事件
getMessageText().apply {
gravity = Gravity.START
text = agreement
text.apply {
text = toClickSpan(
indexOf(serviceSpan)..indexOf(serviceSpan) + serviceSpan.length,
color = getColorRes(R.color.color_3499ff),
clickAction = {
//点击事件
}).toClickSpan(
indexOf(privacySpan)..indexOf(privacySpan) + privacySpan.length,
color = getColorRes(R.color.color_3499ff),
clickAction = {
//点击事件
})
movementMethod = LinkMovementMethod.getInstance()
highlightColor = Color.TRANSPARENT
}
}
toClickSpan 扩展函数:
/**
* 将一段文字中指定range的文字添加颜色和点击事件
* @param range 目标文字的范围
*/
fun CharSequence.toClickSpan(
range: IntRange,
color: Int = getColorRes(R.color.app_theme_text_color_30BF62),
isUnderlineText: Boolean = false,
clickAction: (() -> Unit)?=null
): SpannableString {
return SpannableString(this).apply {
val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
clickAction?.invoke()
}
override fun updateDrawState(ds: TextPaint) {
ds.color = color
ds.isUnderlineText = isUnderlineText
}
}
setSpan(clickableSpan, range.first, range.last, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
}
}
适用场景:隐私协议,用户协议等