web-dev-qa-db-fra.com

Liens dans TextView

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

51
Cata

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 ...

114
Cata

Obtenir des liens fonctionnant à partir de HTML est un peu délicat:

  1. Appliquez votre texte via xml Android:text="@string/… ou via setText() (voir les autres réponses)

  2. Utilisez textView.setMovementMethod(LinkMovementMethod.getInstance()) pour rendre les liens cliquables (voir les autres réponses)

  3. 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

41
Michael Biermann

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 .

28
Gopinath

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.

23
Damian Walczak

Utilisation

Android:linksClickable="true"
Android:autoLink="web"
20
sonida

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.

3
Kevin

La solution: Linkify.addLinks(chatText,Linkify.ALL);

1
manav patadia

Cela fonctionne plutôt correctement: (dans les propriétés textview, dans le fichier xml)

Android:autolink="web"
0
Saurabh

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é.

0
cgr