HTML к тексту с пользовательским слушателем щелчка по ссылке - PullRequest
0 голосов
/ 06 сентября 2018

Это пример строки 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 и использую его в своем приложении, подбрасывая меня предложениями людей! (Я не хочу spanables, так как контент очень динамичный и в формате HTML)

Можно ли перехватить Html.fromHtml и получить URL, чтобы он не открывался в браузере, а просто использовать его в моем приложении, как я хочу?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Я нашел обходной путь, изменив свой 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)
                    })

Код указан в Котлине.

0 голосов
/ 06 сентября 2018

Мы можем просто получить значение href следующим образом:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...