J'ai le TextView suivant défini:
<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 met en évidence les liens dans 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 TextView dans mon activité pour quelque chose d'aussi simple que cela?
On dirait que cela a à voir avec la façon dont je définis ma ressource de chaîne. Cela ne fonctionne pas:
<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
Mais cela fait:
<string name="txtCredits">www.google.com</string>
Ce qui est décevant car je préfère de loin afficher un lien texte plutôt que l'URL complète.
android:focusable="true"
résolu mon problèmeRéponses:
Enterré dans les démos de l'API, j'ai trouvé la solution à mon problème:
Link.java:
J'ai supprimé la plupart des attributs de mon TextView pour correspondre à ce qui était dans la démo.
Cela l'a résolu. Assez difficile à découvrir et à réparer.
Important : n'oubliez pas de supprimer
autoLink="web"
si vous appelezsetMovementMethod()
.la source
J'utilise uniquement
android:autoLink="web"
et cela fonctionne bien. Un clic sur le lien ouvre le navigateur et affiche la bonne page.Une chose que je pourrais deviner, c'est qu'une autre vue est au-dessus du lien. Quelque chose de transparent remplit tout le parent mais n'affiche rien au-dessus du lien. Dans ce cas, le clic va à cette vue au lieu du lien.
la source
Après avoir passé un peu de temps avec cela, j'ai constaté que:
android:autoLink="web"
fonctionne si vous avez des liens complets dans votre code HTML. Les éléments suivants seront mis en évidence en bleu et cliquables:view.setMovementMethod(LinkMovementMethod.getInstance());
fonctionnera avec les éléments suivants (sera mis en évidence et cliquable):Notez que la troisième option a un lien hypertexte, mais la description du lien (la partie entre les balises) elle-même n'est pas un lien.
android:autoLink="web"
ne fonctionne PAS avec de tels liens.android:autoLink="web"
s'il est défini en XML, il remplaceraview.setMovementMethod(LinkMovementMethod.getInstance());
(c'est-à-dire que les liens du troisième type seront mis en évidence, mais pas cliquables).La morale de l'histoire est l'utilisation
view.setMovementMethod(LinkMovementMethod.getInstance());
dans votre code et assurez-vous que vous n'en avez pasandroid:autoLink="web"
dans votre mise en page XML si vous voulez que tous les liens soient cliquables.la source
<a href="http://www.google.com">Go to Google</a>
cela ne fonctionnera pas pour autoLink. Pour tant de réponses sur SO, c'est la seule qui l'a mentionné. Je vous remercie!Les solutions ci-dessus n'ont pas fonctionné pour moi, mais les suivantes l'ont fait (et cela semble un peu plus propre).
Tout d'abord, dans la ressource de chaîne, définissez vos chevrons d'ouverture de balise à l'aide du codage d'entité HTML, c'est-à-dire:
et pas:
En général, encodez tous les chevrons de la chaîne comme ça. BTW, le lien doit commencer par
http://
Puis (comme suggéré ici ) définissez cette option sur votre TextView:
Enfin, dans le code, faites:
C'est tout, aucune regex ou autre piratage manuel requis.
la source
%20
<![CDATA[ ... ]]>
balise.<![CDATA[...]]>
balise.j'ai utilisé ça simplement
rend les liens cliquables donnés ici
la source
<a href...
cliquableSi vous souhaitez ajouter un lien de type HTML, il vous suffit de:
ajouter une chaîne de type HTML de ressource:
ajoutez votre vue à la mise en page sans aucune configuration spécifique au lien:
ajoutez le MovementMethod approprié par programme à votre TextView:
C'est ça! Et oui, avoir des options comme "autoLink" et "linksClickable" travaillant uniquement sur des liens explicites (non enveloppés dans des balises html) est très trompeur pour moi aussi ...
la source
J'ai ajouté cette ligne à
TextView
:android:autoLink="web"
Voici un exemple d'utilisation dans un fichier de mise en page.
layout.xml
échantillonstring.xml
la source
Ce qui suit devrait fonctionner pour toute personne qui recherche une combinaison de texte et d'hyperlien dans une application Android.
Dans
string.xml
:Maintenant, vous pouvez l'utiliser
string
dans n'importe quelle donnéeView
comme celle-ci:Maintenant, dans votre activité ou fragment, procédez comme suit:
À l'heure actuelle, vous n'avez pas besoin de définir
android:autoLink="web"
ou d'android:linksClickable="true"
utiliser cette approche.J'espère que vous trouverez cela utile.
la source
J'espère que cela t'aidera;
la source
android:autoLink=?
de votreTextView
.android:autoLink=?
est important!Seulement de quoi avez-vous besoin pour l'ajouter en mode texte en xml
la source
La chose la plus simple qui a fonctionné pour moi est d'utiliser Linkify
et il détectera automatiquement les URL Web du texte dans la vue de texte.
la source
Richard, la prochaine fois, vous devriez ajouter ce code sous TextView à la mise en page XML à la place.
Cela devrait être comme ça.
Vous n'avez pas besoin d'utiliser ce code (
t2.setMovementMethod(LinkMovementMethod.getInstance());
) pour rendre le lien cliquable.En outre, voici la vérité: tant que vous définissez l' autoLink et le linksClickable , n'oubliez pas d'ajouter ceci dans le fichier String.xml pour que le lien cliquable fonctionne.
la source
en utilisant linkify : Linkify prend un morceau de texte et une expression régulière et transforme toutes les correspondances d'expression régulière dans le texte en liens cliquables
N'oubliez pas
la source
Voici le code Android d'une seule ligne pour rendre le téléphone et l'URL sélectionnables à partir de TextView, peu importe ce qui est une chaîne et ce qui est des données. Vous n'avez pas besoin d'utiliser de balises HTML pour cela.
la source
J'ai remarqué qu'en utilisant
android:autoLink="web"
ainsia bien fonctionné pour les URL mais comme j'avais une adresse e-mail et un numéro de téléphone que je voulais également lier, j'ai fini par utiliser cette ligne
android:autoLink="all"
comme ceciEt ça a fonctionné comme un charme.
la source
Gérer également la couleur du texte Linkify
la source
Assurez-vous de ne pas l' utiliser
setAutoLinkMask(Linkify.ALL)
lorsque vous utilisezsetMovementMethod(LinkMovementMethod.getInstance())
etHtml.fromHTML()
sur desHTML
liens correctement formatés (par exemple,<a href="http://www.google.com/">Google</a>
).la source
Utilisez ceci...
et ajouter une autorisation dans le fichier manifeste
la source
Vous n'avez besoin que de ceci:
Insérez cette ligne dans TextView, qui peut être cliquable en référence au Web. Adresse URL définie sous forme de texte de cette TextView.
Exemple:
la source
La réponse acceptée est correcte, MAIS cela signifie que les numéros de téléphone, les cartes, les adresses e-mail et les liens réguliers, par exemple
http://google.com
sans balises href, NE SERONT PLUS cliquables car vous ne pouvez pas avoir de lien automatique dans le xml.La seule solution complète pour que TOUT puisse être cliqué que j'ai trouvé est la suivante:
Et le TextView ne devrait PAS avoir
android:autolink
. Il n'y a aucun besoinandroid:linksClickable="true"
non plus; c'est vrai par défaut.la source
myapp://
schémas (pour Deep Linking).Voici comment j'ai résolu les liens cliquables et visibles dans une TextView (par code)
la source
Utilisez le code ci-dessous:
la source
[Tested in Pre-lollipop as well as in Lollipop and above]
Vous pouvez obtenir votre chaîne HTML à partir du backend ou de vos fichiers de ressources. Si vous mettez votre texte en tant que chaîne de ressource, assurez-vous d'ajouter la
CDATA
balise:Ensuite, dans le code, vous devez obtenir la chaîne et l'affecter au format HTML et définir une méthode de déplacement de lien:
la source
La raison pour laquelle vous rencontrez le problème est qu'il essaie uniquement de faire correspondre les adresses "nues". des choses comme "www.google.com" ou " http://www.google.com ".
L'exécution de votre texte via Html.fromHtml () devrait faire l'affaire. Vous devez le faire par programme, mais cela fonctionne.
la source
Je ne sais pas si cela vaut la peine d'ajouter une autre réponse, mais juste au cas où ...
J'ai dû traquer cela dans quelques endroits mais j'ai finalement réussi à faire fonctionner cette version du code.
strings.xml:
myactivity.xml:
myactivty.java (dans onCreate ()):
Cela va créer deux hyperliens cliquables avec le texte
link text1
etlink text2
qui redirigent l'utilisateur vers google.la source
Le téléphone Autolink ne fonctionne pas pour moi. Ce qui suit a fonctionné comme un charme,
la source
Si vous utilisez TextView basé sur XML, pour votre besoin, vous devez faire seulement deux choses:
Identifiez votre lien dans la chaîne, par exemple "Ceci est ma page Web". Vous pouvez l'ajouter en xml ou dans le code.
Dans le xml qui a le TextView, ajoutez-les:
la source
Ajouter CDATA à votre ressource de chaîne
Strings.xml
la source
J'utilise le lien automatique pour "souligner automatiquement" le texte, mais je viens de créer un "onClick" qui le gère. (J'ai rencontré ce problème moi-même)
Ne nécessite aucune autorisation, car vous transmettez l'intention aux applications qui gèrent ces ressources (navigateur IE).
C'est ce qui a fonctionné pour moi. Bonne chance.
la source
Je viens de perdre tellement de temps à comprendre que vous devez utiliser getText (R.string.
Quoi qu'il en soit, voici comment j'ai fait travailler le mien. Avec plusieurs hyperliens dans la même vue texte également.
exemple de chaîne
la source