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.
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"
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)
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>
Cela peut aussi être fait en utilisant la propriété par défaut de Textview
Android:autoLink="email"
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: -
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));
}