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