首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML到带有自定义链接的文本单击listener

HTML到带有自定义链接的文本单击listener
EN

Stack Overflow用户
提问于 2018-09-06 17:43:45
回答 2查看 321关注 0票数 0

这是示例HTML字符串,

代码语言:javascript
复制
<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,我得到了这样的结果:

代码语言:javascript
复制
+Elon Musk hey

点击+Elon Musk,它会把我带到浏览器,但我想要相应的URL,并在我的应用程序中使用它,给我建议的人!(我不想要spannables,因为它的内容非常动态,而且是HTML格式的)

有没有可能截取Html.fromHtml并获取网址,使其不能在浏览器中打开,而只是在我的应用程序中按我希望的那样使用?

EN

回答 2

Stack Overflow用户

发布于 2018-09-06 19:05:18

我已经通过修改我的LinkMovementMethod找到了一个解决方法

代码语言:javascript
复制
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点击添加了一个侦听器。您可以通过添加以下行在代码中使用它:

代码语言:javascript
复制
textview.movementMethod = MyLinkMovementMethod(fun(url: String) {
                        Log.e("URL", url)
                    })

代码在Kotlin中。

票数 1
EN

Stack Overflow用户

发布于 2018-09-06 18:28:31

我们可以像这样获得href的值:

代码语言:javascript
复制
String ht = "<span class=\"proflinkWrapper\"><span class=\"proflinkPrefix\">+</span><a class=\"proflink\" href=\"https://plus.google.com/114461178896543099856\" oid=\"114461178896543099856\">Elon Musk</a></span> hey";

int hrefIndex = ht.indexOf("href=");
if (hrefIndex >= 0) {
    int startIndex = hrefIndex + "href=".length();
    int endIndex = ht.indexOf('"', hrefIndex + "href=".length() + 1);

    if (startIndex > 0 && endIndex > 0) {
        String href = ht.substring(startIndex, endIndex);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52201205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档