J'ai besoin de mettre un lien dans un TextView
, j'ai une chaîne qui contient la balise <a href="link">Text for link</a>
et un autre texte . Le problème est que si j'exécute le projet, je peux voir le texte mais ce n'est pas cliquable. J'ai aussi essayé avec la balise <b>
pour voir si cela fonctionne et il semble que cela ne fonctionne pas aussi.
Comment puis-je faire en sorte que cela fonctionne sans l'utilisation de Linkify
?
Merci pour votre aide à tous.
J'ai réussi à faire ce travail après avoir trouvé quelques exemples dans les exemples Android.
voici le code:
textView.setText(Html.fromHtml(
"<b>text3:</b> Text with a " +
"<a href=\"http://www.google.com\">link</a> " +
"created in the Java source code using HTML."));
textView.setMovementMethod(LinkMovementMethod.getInstance());
J'espère que cela aidera les autres ...
Obtenir des liens fonctionnant à partir de HTML est un peu délicat:
Appliquez votre texte via xml Android:text="@string/…
ou via setText()
(voir les autres réponses)
Utilisez textView.setMovementMethod(LinkMovementMethod.getInstance())
pour rendre les liens cliquables (voir les autres réponses)
FaitesNOTadd Android:autoLink="web"
à votre ressource XML (section TextView
), sinon les balises A ne sont pas affichées correctement et ne peuvent plus être cliquées.
Remarque 1:
La OnClickListener
peut être utile si votre TextView
ne contient qu'un seul lien et que vous souhaitez déclencher la navigation, même si l'utilisateur clique à côté de votre lien, mais à l'intérieur de la TextView
.
Remarque 2:Android:linksClickable="true"
ne fonctionne toujours pas (à partir d'Android 3.2), utilisez p. 2 à la place
Linkify est la classe que vous devez utiliser pour créer des liens. BTW, quelle est la raison pour ne pas utiliser Linkify?
Vous pouvez lier tout le texte dans votre affichage de texte pour des actions telles que la visite d'un site Web ou l'appel d'un numéro de téléphone basé sur le schéma. Android fournit le moyen le plus simple de le faire. Considérons le code ci-dessous.
TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);
Pour créer des liens personnalisés, la même classe Linkify fournit diverses options. Google a publié un article de blog à ce sujet .
Je ne pouvais pas le comprendre, mais finalement ça a commencé à marcher quand j'ai fait quelque chose comme:
tvTermsOfUse.setText(Html.fromHtml(getString(R.string.tv_terms_of_use_html)));
Linkify.addLinks(tvTermsOfUse, Linkify.ALL);
tvTermsOfUse.setMovementMethod(LinkMovementMethod.getInstance());
La vue texte ressemble à:
<TextView
Android:id="@+id/tv_terms_of_use"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_centerHorizontal="true"
Android:textAlignment="gravity"
Android:gravity="center"
Android:textColor="@Android:color/white"
Android:textSize="15sp" />
et chaîne res:
<string name="tv_terms_of_use_html">
<![CDATA[This is link to <a href="http://google.com/">Google</a>.]]>
</string>
Partie importante: Le Linkify.addLinks
doit être terminé avant tvTermsOfUse.setMovementMethod
, sinon cela ne fonctionnera pas.
Aucun autre paramètre n'est nécessaire en XML.
Cela m'a pris environ une heure pour le résoudre moi-même, en espérant que cela aide quelqu'un.
MODIFIER:
Selon le commentaire de @rfellons
Merci. Aussi pour moi fonctionne ... MAIS seulement avec
<uses-permission Android:name="Android.permission.INTERNET"/>
sur Manifest.xml. – Rfellons 7 Septembre à 13h31
Assurez-vous de vérifier aussi.
Utilisation
Android:linksClickable="true"
Android:autoLink="web"
Je ne peux pas répondre à votre réponse pour une raison quelconque; Je voulais juste dire que vous pouvez omettre le textView.setText
et simplement le placer dans une ressource chaîne et le définir en utilisant Android:text
. Vous devez juste garder la textView.setMovementMethod(LinkMovementMethod.getInstance());
; Malheureusement, Android:linksClickable="true"
par lui-même ne fonctionne pas.
La solution: Linkify.addLinks(chatText,Linkify.ALL);
Cela fonctionne plutôt correctement: (dans les propriétés textview, dans le fichier xml)
Android:autolink="web"
Pour ajouter les liens dynamiquement (récupérés du serveur), ceci fonctionne:
textView.setText(Html.fromHtml(
"<a href=" + response.getLink()
+ ">" + context.getString(R.string.link_from_server) + "</a> "));
et en XML ajouter ceci:
Android:linksClickable="true"
Si votre strings.xml a ceci:
<string name="link_from_server">Dynamic Link</string>
Cela ajoutera "Lien dynamique" à votre affichage texte et si vous touchez ceci, le lien fourni par votre serveur sera affiché.