Android SpannableString的变色、点击以及点击后的背景色的问题

开发小知识记录

一段文本分成多段可点击且颜色不一样,实现技巧如下:

kotlin 复制代码
val text = getString(R.string.cancel_account_protocol)
val spannableString = SpannableString(text)

//设置点击前面的字的响应
val clickableSpan1 = object : ClickableSpan() {
override fun onClick(widget: View) {
        //前半部分点击事件
    }
    override fun updateDrawState(ds: TextPaint) {
        ds.color = ContextCompat.getColor(requireActivity(),R.color.color_40black)   //1
        ds.isUnderlineText = false   //2
    }

}
spannableString.setSpan(
    clickableSpan1,
    0,
    text.length - 6,
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE
)

// 设置点击后面的字的响应
val clickableSpan2 = object : ClickableSpan() {
    override fun onClick(widget: View) {
        //后半部分点击事件
    }

    override fun updateDrawState(ds: TextPaint) {
        ds.color = ContextCompat.getColor(requireActivity(),R.color.color_07c160)
        ds.isUnderlineText = false
    }
}
spannableString.setSpan(
    clickableSpan2,
    text.length - 6,
    text.length,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

binding.tvProtocol.movementMethod = LinkMovementMethod.getInstance()   //3
binding.tvProtocol.text = spannableString  
binding.tvProtocol.highlightColor = ContextCompat.getColor(requireActivity(),android.R.color.transparent)   //4

注意点一:

变色不是通过ForegroundColorSpan实现的,而是注释1处实现的

注意点二:

去除下划线是重写updateDrawState方法,将isUnderlineText设置为false实现的,见注释2处。

注意点三:

ClickableSpan点击会有选中背景的效果,如果想要清除需要设置TextView的highlightColor为透明色,代码中注释4处。最后不要忘记在设置spannableString之前设置LinkMovementMethod.getInstance(),见注释3处。

看一段具体的UI效果:

相关推荐
apihz31 分钟前
域名WHOIS信息查询免费API使用指南
android·开发语言·数据库·网络协议·tcp/ip
问道飞鱼1 小时前
【移动端知识】移动端多 WebView 互访方案:Android、iOS 与鸿蒙实现
android·ios·harmonyos·多webview互访
aningxiaoxixi1 小时前
Android 之 audiotrack
android
枷锁—sha2 小时前
【DVWA系列】——CSRF——Medium详细教程
android·服务器·前端·web安全·网络安全·csrf
Cao_Shixin攻城狮5 小时前
Flutter运行Android项目时显示java版本不兼容(Unsupported class file major version 65)的处理
android·java·flutter
呼啦啦呼啦啦啦啦啦啦8 小时前
利用pdfjs实现的pdf预览简单demo(包含翻页功能)
android·javascript·pdf
idjl10 小时前
Mysql测试题
android·adb
游戏开发爱好者812 小时前
iOS App 电池消耗管理与优化 提升用户体验的完整指南
android·ios·小程序·https·uni-app·iphone·webview
人生游戏牛马NPC1号13 小时前
学习 Flutter (四):玩安卓项目实战 - 中
android·学习·flutter
星辰也为你祝福h14 小时前
Android原生Dialog
android