Webview将在内容HTML中显示带有蓝色下划线的链接。所以,如果您在HTML中有某些内容,如
<a href="...">blah blah</a>
......它作为链接清晰可见。
Webview还允许您单击电话号码和地址(即使这些只是HTML中的文本,而不是链接)以启动拨号器或地图。
如何让Webview显示带有下划线等的链接(可能是Linkify)?在TextView中很容易,因为可以从TextView获取跨度并对其进行样式化,但Webview不会公开任何方式来检索该数据...至少不是我可以看到通过文档查看。
答案 0 :(得分:2)
以下是一些可以注入的JS代码,用于链接电话号码,电子邮件和网址:
function linkify() {
linkifyTexts(linkifyPhoneNumbers);
linkifyTexts(linkifyEmails);
linkifyTexts(linkifyWebAddresses1);
linkifyTexts(linkifyWebAddresses2);
}
function linkifyPhoneNumbers(text) {
text = text.replace(/\b\+?[0-9\-]+\*?\b/g, '<a href="tel:$&">$&</a>');
return text;
}
function linkifyEmails(text) {
text = text.replace(/(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim, '<a href="mailto:$1">$1</a>');
return text;
}
function linkifyWebAddresses1(text) {
text = text.replace(/(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim, '<a href="$1" target="_blank">$1</a>');
return text;
}
function linkifyWebAddresses2(text) {
text = text.replace(/(^|[^\/])(www\.[\S]+(\b|$))/gim, '$1<a href="http://$2" target="_blank">$2</a>');
return text;
}
var linkifyTexts = function(replaceFunc)
{
var tNodes = [];
getTextNodes(document.body,false,tNodes,false);
var l = tNodes.length;
while(l--)
{
wrapNode(tNodes[l], replaceFunc);
}
}
function getTextNodes(node, includeWhitespaceNodes,textNodes,match) {
if (node.nodeType == 3) {
if (includeWhitespaceNodes || !/^\s*$/.test(node.nodeValue)) {
if(match){
if(match.test(node.nodeValue))
textNodes.push(node);
}
else {
textNodes.push(node);
}
}
} else {
for (var i = 0, len = node.childNodes.length; i < len; ++i) {
var subnode = node.childNodes[i];
if (subnode.nodeName != "A") {
getTextNodes(subnode,includeWhitespaceNodes,textNodes,match);
}
}
}
}
function wrapNode(n, replaceFunc) {
var temp = document.createElement('div');
if(n.data)
temp.innerHTML = replaceFunc(n.data);
else{
//whatever
}
while (temp.firstChild) {
n.parentNode.insertBefore(temp.firstChild,n);
}
n.parentNode.removeChild(n);
}
答案 1 :(得分:1)
鉴于此:
它似乎仍然不是直接从Java执行此操作的方法。可能有用的一件事是编写一些JavaScript代码并在加载页面后运行它,例如如下所示:
这是一个类似的例子:
其中的想法是禁用链接。您可以使用类似的方法添加一些CSS,包括下划线。其他一些可能有用的SOq /链接:
希望这有帮助。