Using Linkify.addLinks combine with Html.fromHtml

后端 未结 3 2191
暖寄归人
暖寄归人 2021-02-14 19:16

I have a TextView that gets it\'s data set by calling this:

tv.setText(Html.fromHtml(myText));

The string myText cont

3条回答
  •  情歌与酒
    2021-02-14 20:02

    100% works solution (kotlin).

    Create class for store HtmlLink before Linkify

    class HtmlLink(val urlSpan: URLSpan, val spanStart: Int, val spanEnd: Int)
    

    Create spanned html (both formats for test)

    val spanned = Html.fromHtml("https://google.com" +
                    "
    Google")

    Store html

    val htmlLinks = ArrayList()
    spanned.getSpans(0, spanned.length, URLSpan::class.java).forEach { urlSpan ->
        htmlLinks.add(HtmlLink(urlSpan, 
                      spanned.getSpanStart(urlSpan),
                      spanned.getSpanEnd(urlSpan)))
    }
    

    Create spannable builder and Linkify it

    val builder = SpannableString(spanned)
    Linkify.addLinks(builder, Linkify.WEB_URLS)
    

    Restore spans.

    htmlLinks.forEach { htmlLink ->
        builder.setSpan(URLSpan(htmlLink.urlSpan.url), htmlLink.spanStart, htmlLink.spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
    }
    

    Set finally text

    scrollContent.text = builder
    

提交回复
热议问题