Comment puis-je faire des liens dans un TextView cliquable?
J'ai le texte suivant TextView définis:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/txtCredits"
android:autoLink="web" android:id="@+id/infoTxtCredits"
android:layout_centerInParent="true"
android:linksClickable="true"></TextView>
où @string/txtCredits
est une ressource de chaîne qui contient <a href="some site">Link text</a>
.
Android, en mettant l'accent sur les liens dans le TextView, mais ils ne répondent pas aux clics. Quelqu'un peut-il me dire ce que je fais mal? Dois-je définir un onClickListener pour le TextView dans mon activité pour quelque chose d'aussi simple que cela?
Dirait qu'il a à voir avec la façon dont je définis mon ressource de chaîne.
Cela ne fonctionne pas:
<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
Mais ce n':
<string name="txtCredits">www.google.com</string>
Qui est une déception, parce que j'aimerais bien plutôt à un lien de texte que de montrer l'URL complète.
- android:autoLink="web", c'est la ligne principale doit être ajouté à xml et il fonctionne comme un charme. merci @Richard
- <string nom="txtCredits"><a href="google.com">www.google.com</a></string> > ci-dessus sttring et il fonctionne. Il est appris que la chaîne dans le href et dans la balise d'ancrage doivent être identiques et ont .com ou .* travailler ont besoin de savoir pourquoi
- <string nom="txtCredits">texte ici<a href="google.com">Google</a></string> > Pour extrait ci-dessus, Cliquez sur texte ici ne devraient pas travailler dans mon cas, que dois-je faire ?
- essayez de github.com/ajaysahani/MultiActionTextView
android:focusable="true"
résolu mon problème
Vous devez vous connecter pour publier un commentaire.
Enterré dans l'API des démos, j'ai trouvé la solution à mon problème:
Link.java:
J'ai enlevé la plupart des attributs sur mon TextView pour correspondre à ce qui était dans la démo.
Que résolu. Assez difficile à découvrir et à corriger.
Important: N'oubliez pas de retirer
autoLink="web"
si vous appelezsetMovementMethod()
.</a>
tag, est également cliquables et, par conséquent, ce qui rend difficile pour faire défiler la liste des résultats. Toutes les pensées?setMovementMethod
ne fonctionne pas sur les API=15 avec ou sans autoLink="web"Je suis en utilisant seulement
android:autoLink="web"
et il fonctionne très bien. Un clic sur le lien permet d'ouvrir le navigateur et affiche la bonne page.Une chose que je pouvais deviner, c'est que certains autre point de vue, au-dessus du lien. Quelque chose qui est transparent remplit tout parent, mais n'affiche rien au-dessus du lien. Dans ce cas, le clic va à ce point de vue au lieu de le lien.
android:autoLink="phone"
et ça fonctionne 🙂android:textColorLink="#03A9F4"
android:autoLink="all"
pour chaque type de lien et ajouterandroid:linksClickable="true"
à être plus "secure".Après avoir passé quelque temps avec eux, j'ai trouvé que:
android:autoLink="web"
fonctionne si vous avez plein de liens dans votre code HTML. Les éléments suivants seront mis en surbrillance en bleu et cliquable:view.setMovementMethod(LinkMovementMethod.getInstance());
va travailler avec la suivante (sera mis en évidence et cliquable):Noter que la troisième option a un lien hypertexte, mais la description du lien (la partie comprise entre les balises) lui-même n'est pas un lien.
android:autoLink="web"
ne PAS travailler avec de tels liens.android:autoLink="web"
si elle est définie en XML remplaceview.setMovementMethod(LinkMovementMethod.getInstance());
(c'est à dire, les liens du troisième type seront mis en évidence, mais pas cliquable).La morale de l'histoire est d'utiliser
view.setMovementMethod(LinkMovementMethod.getInstance());
dans votre code et assurez-vous que vous n'avez pasandroid:autoLink="web"
dans votre XML disposition si vous souhaitez tous des liens cliquables.<a href="http://www.google.com">Go to Google</a>
de ne pas travailler pour autoLink. Pour beaucoup de réponses, et c'est le seul mentionné. Merci!!!!Les solutions ci-dessus ne fonctionne pas pour moi, mais la suite n'a (et il me semble un peu plus propre).
Tout d'abord, dans la chaîne des ressources, définir votre balise d'ouverture des chevrons à l'aide de l'entité HTML de codage, c'est à dire:
et non PAS:
En général, encoder tous les chevrons de la chaîne comme ça. BTW, le lien doit commencer avec
http://
Alors (comme l'a suggéré ici) définissez cette option sur votre TextView:
Enfin, dans le code, n':
C'est tout, aucune regexes ou manuelle des hacks nécessaire.
%20
<![CDATA[ ... ]]>
tag.<![CDATA[...]]>
tag.j'ai utilisé ce simplement
rend les liens cliquables donné ici
<a href...
cliquableSi vous voulez ajouter du code HTML comme lien, tout ce que vous devez faire est de:
ajouter une ressource HTML chaîne:
ajouter votre point de vue à la mise en page avec PAS de lien de configuration spécifiques à tous:
ajouter des MovementMethod par programmation à votre TextView:
Que c'est! Et oui, avoir des options comme "autoLink" et "linksClickable" de travail sur les liens explicites (pas enveloppés dans des balises html) est très trompeur pour moi aussi...
J'ai ajouté cette ligne à la
TextView
:android:autoLink="web"
Ci-dessous est un exemple d'utilisation dans un fichier de mise en page.
layout.xml
échantillonstring.xml
J'espère que cela va vous aider;
android:autoLink=?
de votreTextView
.android:autoLink=?
est important!Seulement de quoi avez-vous besoin d'ajouter ceci dans l'affichage de texte en xml
Richard, la prochaine fois, vous devez ajouter ce code sous TextView à la mise en page XML à la place.
Cela devrait être comme cela.
Vous n'avez pas besoin d'utiliser ce code (
t2.setMovementMethod(LinkMovementMethod.getInstance());
) afin de faire le lien cliquable.Aussi, voici la vérité: tant que vous définissez la autoLink et la linksClickable, n'oubliez pas d'ajouter ce à String.xml fichier de sorte que le lien va fonctionner.
La chose la plus simple qui a fonctionné pour moi est d'utiliser Linkify
et il détecte automatiquement les url de sites web à partir du texte dans le textview.
en utilisant linkify:
Linkify prendre un morceau de texte et une expression régulière et met l'ensemble de l'expression régulière correspond dans le texte en liens cliquables
N'oubliez pas de
Ici est très une ligne de code android pour faire de téléphone et l'url sélectionnable à partir de textView pour n'importe quelle chaîne et qu'est-ce que les données. Vous n'avez pas besoin d'utiliser des balises HTML pour le présent.
Les éléments suivants doivent travailler pour quelqu'un qui est à la recherche d'une combinaison de texte et lien hypertexte à l'intérieur d'une application Android.
Dans
string.xml
:Maintenant, vous pouvez profiter de cette
string
en toutView
comme ceci:Maintenant, dans votre Activité ou de Fragment, procédez de la manière suivante:
Maintenant, vous n'avez pas besoin de mettre en
android:autoLink="web"
ouandroid:linksClickable="true"
à l'aide de cette approche.J'espère que vous trouverez cela utile.
J'ai remarqué que l'utilisation de
android:autoLink="web"
ainsiOK travaillé pour les Url, mais depuis que j'ai eu un e-mail l'adresse et le numéro de téléphone que je voulais un lien, j'ai fini à l'aide de cette ligne de
android:autoLink="all"
comme ceet cela a fonctionné comme un charme.
Assurez-vous de pas utilisation
setAutoLinkMask(Linkify.ALL)
lors de l'utilisation desetMovementMethod(LinkMovementMethod.getInstance())
etHtml.fromHTML()
correctement formatéHTML
liens (par exemple,<a href="http://www.google.com/">Google</a>
).Vous avez besoin seulement ceci:
Insérer cette ligne de TextView, qui peut être cliquable avec la référence sur le web. Une adresse URL dans un texte de cette TextView.
Exemple:
Utiliser ce...
et ajouter la permission dans le fichier de manifeste
Accepté la réponse est correcte, MAIS cela signifie que les numéros de téléphone, des cartes, des adresses e-mail, et des liens réguliers par exemple
http://google.com
sans href balises ne sont PLUS cliquables puisque vous ne pouvez pas avoir autolink dans le xml.La seule solution complète de TOUT ce qui est cliquable que j'ai trouvé est la suivante:
Et le TextView ne devrait PAS avoir
android:autolink
. Il n'y a pas besoin deandroid:linksClickable="true"
soit; c'est le cas par défaut.C'est comment j'ai résolu cliquables et des liens Visibles dans un TextView (par code)
Utilisez code ci-dessous:
[Tested in Pre-lollipop as well as in Lollipop and above]
Vous pouvez obtenir votre code HTML chaîne à partir du backend, ou à partir de vos fichiers de ressources.
Si vous mettez votre texte comme une ressource de la chaîne, assurez-vous d'ajouter le
CDATA
tag:Ensuite dans le code, vous devez obtenir la chaîne et de l'affecter en tant que HTML et de créer un lien méthode de mouvement:
La raison pour laquelle vous rencontrez le problème c'est qu'il ne tente de faire correspondre "à nu" les adresses. des choses comme "www.google.com" ou "http://www.google.com".
L'exécution de votre texte par le biais de Html.fromHtml() devrait faire l'affaire. Vous devez le faire par programmation, mais il fonctionne.
Autolink téléphone n'a pas fonctionné pour moi. La suite travaillé comme un charme,
Ajouter CDATA à votre ressource de chaîne
Strings.xml
Ne sais pas si ça vaut la peine d'ajouter une autre réponse, mais juste au cas où...
J'ai eu à chasser dans quelques endroits mais finalement obtenu cette version du code du travail.
strings.xml:
myactivity.xml:
myactivty.java (dans onCreate()):
Cela va créer deux cliquables liens hypertexte avec le texte
link text1
etlink text2
qui redirigent l'utilisateur vers google.Si à l'aide de XML en fonction du TextView, pour votre condition, vous devez faire deux choses:
Identifier votre lien dans la chaîne, telle que "ceci est ma Page web".
Vous pouvez l'ajouter en xml ou dans le code.
Dans le xml qui a le TextView, ajouter ces:
- Je utiliser le autolink "auto souligner" le texte, mais a juste fait un "onClick" qui gère. (J'ai rencontré ce problème moi-même)
Ne nécessite pas d'autorisations, comme vous êtes de passage de l'intention à l'arrêt pour des applications qui permettent de gérer ces ressources, (I. E. navigateur).
C'est ce qui a fonctionné pour moi. Bonne chance.
Gérer Linkify Couleur du texte Aussi
Juste perdu beaucoup de temps pour comprendre que vous avez à utiliser getText(R. string.quoi que ce soit) au lieu de getString(R. string.quoi que ce soit)...
De toute façon, voici comment j'ai eu le mien de travail. Avec plusieurs liens hypertexte dans le texte même de la vue aussi.
exemple de chaîne de
Mon code était comme ça:
Mon code Java était comme ça:
Ce que des points le lien vers une autre activité. Mais ce lien est cliquable et fonctionne parfaitement. Testé dans Android Studio 1.5 (Extrait)
Créer une méthode d'extension sur SpannableString:
L'utiliser pour faire de chaîne de caractères dans votre TextView cliquable:
Profitez-en!
Comme le la liaison de données est que j'aimerais partager ma solution pour le databinding TextViews l'appui des balises html avec des liens cliquables.
Pour éviter l'extraction de tous les textview et en leur donnant la prise en charge html à l'aide de
From.html
nous prolongeons le TextView et de mettre de la logique danssetText()
J'ai faites un résumé, qui montre aussi l'exemple de l'entité et de la vue pour l'utilisation de ce.