Android 从带有html标签的String字符串中提取网页链接url

最近在做一个需求,要求把服务端下发的内容以超链接文本形式展示,且需要从app内部的浏览器打开。

这个需求包含了以下需要实现的内容,让我们来看一看。

1 把服务端下发的String内容以超链接文本形式展示

服务端下发的内容String如下:

<a href="https://www.xxx.html">XXX</a>

String内容是一个HTML<a>标签。

熟悉android超链接文本处理的朋友应该知道可以通过Html类的fromHtml方法来把这个String解析成一个SpannableString,从而把这个SpannableString设置在TextView上就可以将服务器下发的内容展示成超文本链接并点击跳转了。

2 提取String内容里的url链接

第一步不难,但是要把这个链接从app内部的浏览器打开还是需要一些处理的。

想要在app内部打开链接,首先我们要知道链接是什么以及怎么获取到这个链接。

经过一番的网上查询以及实验,最终找到了获取url的方法。

TextView提供了一个getUrls()方法,这个方法返回了一个URLSpan数组。

而这个URLSpan数组就是如果当前TextView设置的内容是SpannableString,则这个数组里包含了这个String所有的URLSpan。(这部分是猜测出来的,没有经过太多验证。因为自己调试的时候测试数据只包含了一个URLSpan,一般场景也就配一个跳转链接)

所以提取url的方法就是

val url = textView.urls[0].url

这样就能把TextView的跳转链接获取到了。

3 设置点击事件为打开app内部浏览器

在给TextView设置超文本链接的Spanned之后,我们想要给TextView设置onClick事件,让它点击之后唤起app内部的网页浏览页面。

但是设置完onClick事件后,我们发现TextView点击后还是从手机系统的浏览器打开了链接。

反复查询之后发现原来设置SpannableString还会给TextView设置一个属性叫LinkMovementMethod.

如果不设置这个属性,之前的SpannableString是不会自动打开系统浏览器的。

设置之后它的优先级会比onClick事件要高。

所以如果设置完onClick事件后,发现还是从手机系统打开浏览器,要检查一下这个LinkMovementMethod是否设置。

我们直接在设置onClick前把MovementMethod设置为null即可。

textView.movementMethod = null

这样一来就可以通过onClick事件打开app内部的浏览器,把url作为参数,打开超链接文本的链接了。

猜你喜欢

转载自blog.csdn.net/Kongou/article/details/128178020