前言:
在android开发中,第一次使用安装APP,都有一个《用户协议》和《隐私政策》的弹框提示。
如下图所示:
1.怎么在一段文本中能够点击a标签呢?
首先:使用TextView显示一段代用<font>标签的文本,如下所示:
<font color="#222222">欢迎使用小游戏APP。在您使用本APP前,请仔细阅读<font color="#FF9800"><a href= "https://baidu.com/agreement.html">《用户协议》</a ></font>和<font color="#FF9800"><a href="https://baidu.com/privacy.html">《隐私政策》</a ></font>的全部内容,同意并接受全部条款后开始使用我们的产品和服务。我们会严格按照政策内容使用和保护您的个人信息,感谢您的信任。<br/><br/>若您同意以上用户协议和隐私协议保护政策,请点击“同意”并开始使用我们的产品和服务。</font>
- 使用Html.fromHtml
/**
* html 带有<font>标签的文本
*/
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
}
/**
* 捕获<a>标签点击事件
*/
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()