0

我从后端收到了一个动态的自定义字符串,其中包含一个 HTML 标记<a href>

字符串如下所示:

 "Some string from backend which have a `<a href="">`link`<a/>`. This string is passed to an app."

因此,在我的 Android 应用程序中,我希望仍然具有跨度外观(如 URLSpan 所具有的粗体链接等),但我想自己处理点击。因此,我不想在单击 WebView 时打开它,我想以某种方式覆盖对它的单击。

在安卓上可以吗?

我已经尝试过类似的方法,但它不起作用,我想有一种简单的方法可以做到这一点(也许不删除旧跨度,并从头开始创建链接外观,但只是以某种方式处理/覆盖点击它而不丢失链接外观?)

          bodyText.text = SpannableStringBuilder.valueOf(bodyText.text).apply {  
          getSpans(0, length, URLSpan::class.java)
                .forEach {
                //add new clickable span at the same position
                setSpan(
                    object : ClickableSpan() {
                        override fun onClick(widget: View) {
                            // trigger my own listener 
                            Toast.makeText(bodyText.context, "Clicked old span", Toast.LENGTH_SHORT).show();
                        }
                    },
                    getSpanStart(it),
                    getSpanEnd(it),
                    Spanned.SPAN_INCLUSIVE_EXCLUSIVE
                )
           //remove old URLSpan
           removeSpan(it)
            }
        }

此代码不起作用,它只是从文本中删除链接。

我的情况是,当我触摸提到的跨度而不是触发 webview 时,我想显示一个对话框。

4

1 回答 1

0

    bodyText.text = SpannableStringBuilder.valueOf(text).apply {
                getSpans(0, length, URLSpan::class.java).forEach {
                    setSpan(
                    object : ClickableSpan() {
                        override fun onClick(widget: View) {
                            // trigger my own listener 
                            Toast.makeText(bodyText.context, "Clicked old span", Toast.LENGTH_SHORT).show();
                        }
                    },
                            getSpanStart(it),
                            getSpanEnd(it),
                            Spanned.SPAN_INCLUSIVE_EXCLUSIVE
                    )
                    removeSpan(it)
                }
            }
        // Include this to make links clickable
        movementMethod = LinkMovementMethod.getInstance()

你必须添加bodyText.movementMethod = LinkMovementMethod.getInstance()

于 2021-03-24T06:26:49.853 回答