我有包含web URL、电子邮件地址和电话号码的HTML内容。当我使用下面的代码时,只有电子邮件地址成为链接,而不是web URL。问题可能是什么?我也尝试过使用Linkify.ALL。但没起作用。
val htmlSpannable = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY)
} else {
Html.fromHtml(content)
}
val spannableBuilder = SpannableStringBuilder(htmlSpannable)
val bulletSpans = spannableBuilder.getSpans(
0,
spannableBuilder.length,
BulletSpan::class.java
)
bulletSpans.forEach {
val start = spannableBuilder.getSpanStart(it)
val end = spannableBuilder.getSpanEnd(it)
spannableBuilder.removeSpan(it)
spannableBuilder.setSpan(
ImprovedBulletSpan(bulletRadius = dip(3, context), gapWidth = dip(8, context)),
start,
end,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
)
}
textView.text = spannableBuilder.trimEnd()
Linkify.addLinks(textView, Linkify.WEB_URLS or Linkify.EMAIL_ADDRESSES or Linkify.PHONE_NUMBERS)
textView.movementMethod = LinkMovementMethod.getInstance()发布于 2021-02-22 22:19:45
Linkify.addLinks删除了现有的UrlSpan,因此在给定的示例中,一旦应用了Linkify,在HTML spannable中生成的链接就会被删除。但是,这两种方法都可以组合使用。首先,从HTML转换,然后保存这些跨度,链接以获得电话号码,等等,然后重新应用HTML跨度。
使用提供的示例:
val content = "<a href=\"https://www.google.com\">Google</a> <h4>3. Email us (at <strong>test@gmail.com</strong>)</h4>"
//convert to html
val htmlSpannable = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY)
} else {
Html.fromHtml(content)
}
//save html spans
val htmlUrlSpans = htmlSpannable.getSpans(0, htmlSpannable.length, URLSpan::class.java)
//apply Linkify (resets existing Url spans)
val linkifiedSpannable = SpannableString(htmlSpannable)
Linkify.addLinks(linkifiedSpannable, Linkify.WEB_URLS or Linkify.EMAIL_ADDRESSES or Linkify.PHONE_NUMBERS)
//reapply spans
htmlUrlSpans.forEach { span ->
val end: Int = linkifiedSpannable.getSpanEnd(span)
val start: Int = linkifiedSpannable.getSpanStart(span)
linkifiedSpannable.setSpan(span, start, end, 0)
}
//set combined one
textView.text = linkifiedSpannable.trimEnd()
textView.movementMethod = LinkMovementMethod.getInstance()删除了example中的项目符号跨度,因为它是自定义的,所以需要重新读回它。
在这个场景中,如果您有一个像"<a href=\"https://www.google.com\">https://www.google.com</a>"这样的链接,那么进一步测试一下会发生什么可能会更好,这样就会再次应用span。
发布于 2021-03-01 11:14:43
这应该是可行的。
a.将html_string的文本设置为html形式的文本,并在标签中声明链接(‘’ Google ‘’将在链接形式中显示'Google‘)。
因此,让我们将字符串html_string设置为:
<b>text_html_program: Explicit links using <a> markup.</b> This has markup for a <a href="http://www.google.com">link</a> specified via an <a> tag. Use a "tel:" URL to <a href="tel:4155551212">dial a phone number</a>b.在TextView中显示此字符串。
text_html.setText( Html.fromHtml(html_string));
text_html.setMovementMethod(android.text.method.LinkMovementMethod.getInstance());https://stackoverflow.com/questions/66257894
复制相似问题