Android TextView加载Html ,捕获a标签点击事件

前言:

在android开发中,第一次使用安装APP,都有一个《用户协议》和《隐私政策》的弹框提示。

如下图所示:

yhx.png

1.怎么在一段文本中能够点击a标签呢?
首先:使用TextView显示一段代用标签的文本,如下所示:


欢迎使用小游戏APP。在您使用本APP前,请仔细阅读《用户协议》《隐私政策》的全部内容,同意并接受全部条款后开始使用我们的产品和服务。我们会严格按照政策内容使用和保护您的个人信息,感谢您的信任。

若您同意以上用户协议和隐私协议保护政策,请点击“同意”并开始使用我们的产品和服务。
  1. 使用Html.fromHtml
 /**
     * html  带有标签的文本
     */
    private fun getClickableHtml(html: String?): CharSequence {
        val spannedHtml: Spanned = Html.fromHtml(html)
        val clickableHtmlBuilder = SpannableStringBuilder(spannedHtml)
        val spans = clickableHtmlBuilder.getSpans(0, spannedHtml.length, URLSpan::class.java)
        for (value in spans) {
            setLinkClickable(clickableHtmlBuilder, value);
        }

        return clickableHtmlBuilder
    }



 /**
     * 捕获标签点击事件
     */
    private fun setLinkClickable(clickableHtmlBuilder: SpannableStringBuilder, urlSpan: URLSpan?) {
        val start = clickableHtmlBuilder.getSpanStart(urlSpan)
        val end = clickableHtmlBuilder.getSpanEnd(urlSpan)
        val flags = clickableHtmlBuilder.getSpanEnd(urlSpan)
        val clickableSpan = object : ClickableSpan() {
            override fun onClick(p0: View) {
                val url = urlSpan?.url
                if (url?.contains("agreement.html")!!) {
                    mPrivacyDialogListener?.agreementOonClick(url)
                } else {
                    mPrivacyDialogListener?.serviceOnClick(url)
                }
            }

            override fun updateDrawState(ds: TextPaint) {
                //设置颜色
                ds.color = Color.parseColor("#FF9800")
                //设置是否要下划线
                ds.isUnderlineText = false
            }

        }
        clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);

    }


3.如何使用:

  //测试文本上面有,直接复制过来运行看效果即可
 mTextContent?.text = getClickableHtml("这里填写html文本")
//设置可点击,这句不能少
mTextContent?.movementMethod = LinkMovementMethod.getInstance()

你可能感兴趣的:(Android TextView加载Html ,捕获a标签点击事件)