2012-03-16 4 views
1

Веб-просмотр отобразит ссылки в содержании HTML как имеющие синие подчеркивания. Так что, если у вас есть что-то в HTML, напримерСделать видимыми прямые ссылки Webview

<a href="...">blah blah</a> 

... ясно видно как ссылка.

Веб-просмотр также позволяет вам нажимать на номера телефонов и адреса (даже если это только текст в HTML, а не ссылки), чтобы запустить Dialer или Maps.

Как получить Webview для отображения этих ссылок (Linkify, возможно) с подчеркиваниями и т. Д.? Это достаточно легко в TextView, поскольку вы можете получить промежутки из TextView и стилизовать их, но Webview не предоставляет какой-либо способ получить эти данные ... по крайней мере, не так, чтобы я мог просматривать документы.

+0

Любые идеи? Улики? Я был бы признателен даже за полуобразованное направление. – Turnsole

ответ

1

Учитывая это:

это все еще, кажется, не быть способ сделать это с Java напрямую. Одна вещь, которая может работать, - написать код JavaScript и запустить его после загрузки страницы, например. как указано здесь:

Вот пример подобной вещи:

, где идея заключается в том, чтобы отключить ссылки. Вы можете использовать аналогичный подход для добавления CSS, включая подчеркивание. Несколько других SOqs/ссылки, которые могут помочь:

Надеется, что это помогает.

+0

У меня все еще нет ответа, но спасибо за вход. – Turnsole

+0

Уверенная вещь - вы пробовали подход «отключить ссылки»? Если да, то что не получилось? –

+0

Я прочитал эту тему. Моя проблема связана с ссылками на Карты. Urls и номера телефонов имеют довольно простой шаблон регулярного выражения, поэтому что-то подобное будет работать нормально; но обнаружение адреса в тексте - нетривиальная задача, которая уже решена тем, что накладывает невидимые ссылки на представление. Я просто хочу понять, как эти ссылки добираются туда и делают их видимыми. – Turnsole

2

Вот некоторые JS код, который может быть введен в linkify номера телефонов, электронной почты и веб-сайты:

  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(/(\[email protected][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); 

      } 
Смежные вопросы