web-dev-qa-db-fra.com

Faire un hyperlien textview dans Android

Je veux faire un lien pour un texte textview comme Google . Est-il possible de faire un lien comme celui-ci? (i.e) Lorsque vous cliquez sur le mot Google, le lien approprié doit être ouvert. Toutes les idées sont les bienvenues.

63
Srinivas

Essayez ceci et laissez-moi savoir ce qui se passe ..

En utilisant du code Java:

TextView textView =(TextView)findViewById(R.id.textView);
textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href='http://www.google.com'> Google </a>";
textView.setText(Html.fromHtml(text));

À partir du niveau de l'API> = 24 et plus, Html.fromHtml(String source) est obsolète, utilisez plutôt fromHtml(String, int),

textView.setText(Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT));

Ou dans un fichier XML de mise en page, dans les attributs de votre widget TextView

Android:autoLink="web"
Android:linksClickable="true"
107
user370305

utilisez Android:autoLink="web" dans le fichier XML de votre TextView. Il devrait convertir automatiquement les URL sur lesquelles il est possible de cliquer (si trouvé dans le texte)

51
waqaslam

Tous testés et fonctionnant à 100% 
Solution: Android:autoLink="web" 
ci-dessous est un exemple complet 

Sample Layout Xml

    <TextView
        Android:id="@+id/txtLostpassword"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:autoLink="email"
        Android:gravity="center"
        Android:padding="20px"
        Android:text="@string/lostpassword"
        Android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        Android:id="@+id/txtLostpassword"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:autoLink="web"
        Android:gravity="center"
        Android:padding="20px"
        Android:text="@string/defaultpassword"
        Android:textAppearance="?android:attr/textAppearanceSmall" />

Chaîne dans string.xml 

<string name="lostpassword">If you lost your password please contact <a href="mailto:[email protected]?Subject=Lost%20Password" target="_top">[email protected]</a></string>

<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>
26
Shanewaj

Cela peut aussi être fait en utilisant la propriété par défaut de Textview  

Android:autoLink="email"
6
Rishabh Bhardwaj

Remarque: - Html.fromHtml est obsolète dans Android N

Vous devez vérifier et prendre en charge les versions Android N et supérieures d'Android.

                  //Set clickable true
                 tagHeading.setClickable(true);

                  //Handlle click event
                  tagHeading.setMovementMethod(LinkMovementMethod.getInstance());

                if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.N) {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>", Html.FROM_HTML_MODE_LEGACY));
                } else {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>"));
                }

Alternativement

Vous pouvez ne pas vouloir ajouter par programme l’indicateur autoLink sur TextView.

Android: autoLink = "web"

Android: linksClickable = "true"

De cette façon, vous n'avez pas besoin d'ajouter des balises <a href='somelink'>

Ce qui est un inconvénient, si vous voulez ajouter hyperlink sur une text, vous ne pouvez pas le faire de cette façon. Par exemple, vous ne pouvez pas faire quelque chose comme ceci: - [hiteshsahu] [1]

           <TextView
                Android:id="@+id/tag_info"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_below="@+id/tag_ll"
                Android:layout_gravity="left"
                Android:layout_margin="10dp"
                Android:autoLink="web"
                Android:linksClickable="true"
                Android:text="https://github.com/hiteshsahu"
                Android:textColor="@color/secondary_text" />

Le résultat des deux approches: - 

https://github.com/hiteshsahu

4
Hitesh Sahu

La dernière version du SDK fromHtml est obsolète Utilisez la ligne ci-dessous. 

String yourtext = "<a style='text-decoration:underline' href='http://www.sample.com'> Sample Website </a>";
    if (Build.VERSION.SDK_INT >= 24) {
        textView.setText(Html.fromHtml(yourtext, Html.FROM_HTML_MODE_LEGACY));
    } else {
        textView.setText(Html.fromHtml(yourtext));
    }
1
Rohan Pawar