美文网首页Android
Android TextView部分文字实现点击事件

Android TextView部分文字实现点击事件

作者: 农田蚂蚁 | 来源:发表于2019-08-16 10:40 被阅读0次

引入

项目中遇到这样一个需求,TextView中的部分文字实现可以点击跳转的逻辑,大概是这样:


微信图片_20190816101138.png

通过查找谷歌官方文档发现有已经封装好的类库可以实现这种功能了

SpannableStringBuilder
官方注释:This is the class for text whose content and markup can both be changed.
翻译为:这是内容和标记都可以更改的文本类。

实现

    /**
     * 根据接口数据动态设置协议
     */
    private fun initProtocol(list: List<RegisterProtocol>) {
        if(!list.isNullOrEmpty()){
            var nameList= ArrayList<String>()
            for (registerProtocol in list)
                nameList.add(registerProtocol.name!!)
            var joinStr=TextUtils.join("、",nameList)
            var result=String.format("我已阅读并同意%s",joinStr)
            var style =  SpannableStringBuilder();
            style.append(result);

            var startIndex=7
            for(index in 0..list.size-1){
                var registerProtocol=list.get(index)
                var name=registerProtocol.name
                var url=registerProtocol.url

                //设置协议点击事件
                val clickableSpan = object : ClickableSpan() {
                    override fun onClick(widget: View) {
                        ARouter.getInstance().build(RouterUrl.Web.H5).withString("url", url).navigation()
                    }
                    override fun updateDrawState(ds:TextPaint) {
                        //super.updateDrawState(ds)
                        ds.setUnderlineText(false)  //是否设置下划线  false不设置
                    }
                }
                var endIndex=startIndex+name!!.length
                style.setSpan(clickableSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

                //设置协议文字颜色
                var foregroundColorSpan = ForegroundColorSpan(ContextCompat.getColor(context, R.color.c_ff722c))
                style.setSpan(foregroundColorSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

                startIndex=endIndex+1 //顿号、 所以要+1
            }
            //在单击链接时凡是有要执行的动作,都必须设置MovementMethod对象
            register_protocol.setMovementMethod(LinkMovementMethod.getInstance())
            register_protocol.setText(style)
        }
    }

实现就这么简单,具体可以根据你们的实际需求去修改。

相关文章

网友评论

    本文标题:Android TextView部分文字实现点击事件

    本文链接:https://www.haomeiwen.com/subject/wyffsctx.html