2010-11-29 5 views
37

Cela semble être un problème trivial, mais il m'a un peu perplexe. Je veux charger une chaîne HTML en utilisant Html.fromHtml(), et avoir des liens dans la chaîne pour être cliquable et ouvert dans le navigateur.Comment est-ce que je peux cliqueter des liens dans fromHTML? (Android)

exemple de base:

textView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>")); 

Avec cet extrait, le texte est formaté comme si elle était un lien (bleu, souligné), mais ce n'est pas cliquable. J'ai essayé Linkify, mais cela ne semble fonctionner qu'avec des liens qui ne sont pas basés sur HTML.

Des suggestions?

Répondre

113

Comme je suppose, la solution est triviale:

textView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>")); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 

La deuxième ligne active en quelque sorte le comportement de lien, même si je ne suis pas tout à fait sûr de savoir comment. La même question est abordée à Google Code.

+1

note J'ai essayé ceci en référençant une ressource String.xml. ce travail WONT. :-) – Blundell

+2

Utilisez CDATA pour strings.xml pour éviter que les liens soient traités dans les sous-étiquettes. –

+1

Ne fonctionne pas sur 4.0 pas sûr sur les versions précédentes :( – schwiz

3

Il devrait être ainsi:

textView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>")); 
textView.setAutoLinkMask(Linkify.WEB_URLS); 
textView.setLinksClickable(true); 

en XML devrait être

<TextView 
    android:id="@+id/txtview" 
    android:autoLink="web" 
    android:linksClickable="true" 
    /> 
+3

Je n'arrive pas à faire fonctionner cette solution, l'ai-je essayée? semble avoir le même problème que de lier des liens "visibles", pas des ancres avec un texte différent –

+0

autoLink fait planter notre application sur certains utilisateurs (mais nous une base de 20 millions d'utilisateurs, donc ça fait une différence) –

5

Le javadoc du LinkMovementMethod dit qu'il

Prise en charge en cliquant sur les liens avec DPad Center ou Entrer.

Il est donc logique que cela fonctionne de cette façon.

et a confirmé, avec des œuvres comme 4.2.2 charme avec juste la

textView.setMovementMethod(LinkMovementMethod.getInstance()); 
15

Comme mentionné dans d'autres réponses, un moyen est d'utiliser avant:

xtView.setText(Html.fromHtml("<a href=\"http://www.google.com\">This is a link</a>")); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 

Cependant, cela ne travailler si vous avez n'importe quel android: ensemble de valeur autoLink, pas seulement «web» que d'autres commentaires semblent suggérer. Cela signifie que vous pouvez utiliser cette solution pour lier les URL au détriment de la désactivation ou de la suppression du lien entre le téléphone, le courrier électronique et les cartes.

+0

Ceci est la bonne réponse pour les situations où vous utilisez Html.fromHtml(). trouve sur la réponse sélectionnée. – wblaschko

0
String data="MyTest"; 

textView.setText(data); 
textView.setText(Html.fromHtml(data)); 
textView.setMovementMethod(LinkMovementMethod.getInstance()); 
textView.setLinksClickable(true); 
+1

Vous devriez éditer ceci pour inclure que le fait d'avoir l'attribut android: autoLink défini sur n'importe quoi remplacera la méthode de mouvement – Zach

Questions connexes