Android链接网址链接非网址

我想让web浏览器在textview内点击。 我用这个代码

tv.setLinksClickable(true);
tv.setAutoLinkMask(Linkify.WEB_URLS);
Linkify.addLinks(tv, Linkify.WEB_URLS);

它链接网站的网址,但似乎也随机链接其他文本,如z.xyz dzo.yzw等。

我如何才能将链接链接到链接URL? 要尝试和检测以http://或https://开始的链接,我尝试了这种模式编译

tv.setLinksClickable(true);
Pattern httpPattern = Pattern.compile("^(http|https)://");
Linkify.addLinks(tv, httpPattern,"");

但没有奏效(没有链接被强调)。 RegEx是否正确? addLinks的第三个参数应该是什么?

感谢您的任何提示,以实现这一目标。


经过多次搜索和反复试验,这是解决方案。 不要使用默认的Linkiny.WEB_URLS。 使用查找链接的自定义正则表达式模式。 我用了以下(et是一个EditText)。

et.setLinksClickable(true);
Pattern httpPattern = Pattern.compile("[a-z]+://[^ n]*");
Linkify.addLinks(et, httpPattern,"");

这只会链接网址,而不是其他字符串,由Linkify.WEB_URLS可以完成的,以2个单词分隔。

如果该正则表达式不足以满足您的需求,请参阅以下链接,了解处理更复杂情况的测试替代方法https://mathiasbynens.be/demo/url-regex

希望能够帮助有相同问题的其他人。


这里对应于RFC 3986(URL标准)的模式:

public static final Pattern URL_PATTERN = Pattern.compile(
        "(?:^|[W])((ht|f)tp(s?)://|www.)"
                + "(([w-]+.){1,}?([w-.~]+/?)*"
                + "[p{Alnum}.,%_=?&#-+()[]*$~@!:/{};']*)",
        Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);

来自:https://stackoverflow.com/a/5713866/2980992。


你可以这样走:

String regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
if (tv.getText().toString().matches(regex)) {
    tv.setLinksClickable(true);
    Linkify.addLinks(tv, Linkify.WEB_URLS);
}

有关URL正则表达式的更多信息:使用正则表达式来匹配Java中的URL

链接地址: http://www.djcxy.com/p/74641.html

上一篇: Android linkify URLs links non URLs

下一篇: customizing linkify method in java(Android Studio)