这是示例 HTML 字符串,
<span class=\"proflinkWrapper\"><span class=\"proflinkPrefix\">+<\/span><a class=\"proflink\" href=\"https://plus.google.com/114461178896543099856\" oid=\"114461178896543099856\">Elon Musk<\/a><\/span> hey
使用 HTML.fromHtml,我明白了,
+Elon Musk hey
点击 +Elon Musk 后,我会进入浏览器,但我想要相应的 URL 并在我的应用程序中使用它,请向我提出建议! (我不需要 spannable,因为内容非常动态并且采用 HTML 格式)
是否可以拦截 Html.fromHtml 并获取 URL 并使其不在浏览器中打开,然后按照我的意愿在我的应用程序中使用它?
最佳答案
我通过修改 LinkMovementMethod 找到了解决方法
import android.text.Spannable
import android.text.style.URLSpan
import android.view.MotionEvent
import android.widget.TextView
class MyLinkMovementMethod(var onUrlClickListener: (String) -> Unit) : android.text.method.LinkMovementMethod() {
override fun onTouchEvent(widget: TextView, buffer: Spannable, event: MotionEvent): Boolean {
val action = event.action
if (action == MotionEvent.ACTION_UP) {
var x = event.x.toInt()
var y = event.y.toInt()
x -= widget.totalPaddingLeft
y -= widget.totalPaddingTop
x += widget.scrollX
y += widget.scrollY
val layout = widget.layout
val line = layout.getLineForVertical(y)
val off = layout.getOffsetForHorizontal(line, x.toFloat())
val link = buffer.getSpans(off, off, URLSpan::class.java)
if (link.isNotEmpty()) {
val url = link[0].url
if (url.contains("https") or url.contains("tel") or url.contains("mailto") or url.contains("http") or url.contains("https") or url.contains("www")) {
onUrlClickListener(url)
}
return true
}
}
return super.onTouchEvent(widget, buffer, event)
}
}
你可以通过修改代码来添加自己的监听器,目前我已经添加了URL点击的监听器。您可以通过添加以下行在代码中使用它:
textview.movementMethod = MyLinkMovementMethod(fun(url: String) {
Log.e("URL", url)
})
代码采用 Kotlin 语言。
关于java - HTML 到文本,带有自定义链接点击监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52201205/