gpt4 book ai didi

java - HTML 到文本,带有自定义链接点击监听器

转载 作者:行者123 更新时间:2023-12-02 10:50:42 25 4
gpt4 key购买 nike

这是示例 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com