web-dev-qa-db-fra.com

Lien actif Android de l'URL dans TextView

Je reçois du texte dynamique à partir d’un service Web et l’affiche dans un TextView. Parfois, TextView a une URL comme <a href="http://hello.com">hello</a>. J'ai défini le texte en utilisant le code suivant.

textView.setText(Html.fromHtml(sampletext));

Et définissez également Android:autoLink="web" dans le fichier xml correspondant qui contient la TextView. Maintenant, le lien s'affiche correctement avec la couleur bleue et souligné, mais j'ai trouvé le son juste un lien mort. Rien ne se passe si nous essayons de cliquer dessus. Que dois-je faire pour rendre le lien actif?

48
dev_android

Après avoir réexaminé toutes les solutions, un résumé avec quelques explications:

Android:autoLink="web" 

trouvera une URL et créera un lien même si Android: linksClickable n’est pas défini, les liens sont cliquables par défaut. Vous n'êtes pas obligé de garder l'URL seule, même au milieu d'un texte, elle sera détectée et cliquable.

<TextView
    Android:text="My web site: www.stackoverflow.com"
    Android:id="@+id/TextView1"
    Android:layout_height="wrap_content" 
    Android:layout_width="wrap_content"
    Android:autoLink="web">
</TextView>

Pour définir un lien via le code, même principe, aucun motif ni Android: autoLink dans la mise en page, le lien se trouve automatiquement à l'aide de Linkify:

  final TextView myClickableUrl = (TextView) findViewById(R.id.myClickableUrlTextView);
  myClickableUrl.setText("Click my web site: www.stackoverflow.com");
  Linkify.addLinks(myClickableUrl, Linkify.WEB_URLS);
121
L. G.

Cela fonctionne pour moi:

<TextView
    Android:text="www.hello.com"
    Android:id="@+id/TextView01"
    Android:layout_height="wrap_content" 
    Android:layout_width="fill_parent"
    Android:autoLink="web">
</TextView>
36

Pour économiser une fois la vraie solution est 

    <TextView
    Android:text="www.hello.com"
    Android:id="@+id/TextView01"
    Android:layout_height="wrap_content" 
    Android:layout_width="fill_parent"
    Android:autoLink="web"
    Android:linksClickable="true">
</TextView>

et je l'utilise et cela fonctionne parfaitement 

13
M.Ali El-Sayed

Il y a 2 cas:

  • le texte ressemble à "click on http://www.hello.com"

alors il vous suffit de définir l'attribut autoLink dans le fichier XML pour que le lien soit automatiquement détecté dans le texte:

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:autoLink="web"
    Android:text="click on http://www.hello.com"/>
  • le texte ressemble à click on <a href="http://hello.com">hello</a>

ensuite, vous devez le faire par code et indiquez que le texte est html, puis spécifiez une méthode de déplacement de lien pour le clic:

    String text = "click on <a href=\"http://hello.com\">hello</a>";
    TextView textView = view.findViewById(R.id.textView);
    textView.setText(Html.fromHtml(text));
    textView.setMovementMethod(LinkMovementMethod.getInstance());
6
Arnaud SmartFun

Découvrez cette approche:

String text = "Visit stackoverflow.com";
TextView label = new TextView(this);
label.setText(text);
Pattern pattern = Pattern.compile("stackoverflow.com");
Linkify.addLinks(label, pattern, "http://");
4
Sherif elKhatib

j'ai donner une idée que je l'ai trouvé

TextView tv = ( TextView ) findViewById( R.id.link );  
    WebView wv = ( WebView ) findViewById( R.id.webView );  
    URLSpan[] urlSpans = tv.getUrls();  
    for ( URLSpan urlSpan : urlSpans )  
    {  
        wv.loadUrl( urlSpan.getURL() );  
    }  

string.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
  <string name="app_name">Hello, Android</string>  
  <string name="link">'<a href="http://www.google.com" rel="nofollow">Google</a>'</string>  
</resources> 

main.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
        xmlns:Android="http://schemas.Android.com/apk/res/Android"  
        Android:orientation="vertical"  
        Android:layout_width="fill_parent"  
        Android:layout_height="fill_parent"  
        >  

  <TextView  
          Android:id="@+id/link"  
          Android:layout_width="wrap_content"  
          Android:layout_height="wrap_content"  
          Android:autoLink="all"  
          Android:linksClickable="true"  
          Android:text="@string/link" />  

  <WebView  
          Android:id="@+id/webView"  
          Android:layout_width="fill_parent"  
          Android:layout_height="wrap_content"  
          Android:layout_weight="1.0" />  

</LinearLayout>  
3
Pratik

Dans votre XML, vous devez ajouter Android:linksClickable="true" dans le TextView.

2
LuxuryMode

essayez ceci https://saket.me/better-url-handler-textview-Android/

C'est une très bonne solution et facile

1
SAndroidD

Answer a raison, MAIS pas complet, car j'avais dans mon xml des propriétés d'autres réponses comme autoLink et linksClickable et de manière programmatique ne fonctionnaient pas. Aussi, quand je passe chaîne avec html à partir d'une ressource chaîne, cela ne fonctionne pas non plus, alors méfiez-vous, vous devez nettoyer votre fichier xml et passer la chaîne directement, exactement comme dans cette réponse.

    String text = "click on <a href=\"http://hello.com\">hello</a>";
    TextView textView = view.findViewById(R.id.textView);
    textView.setText(Html.fromHtml(text));
    textView.setMovementMethod(LinkMovementMethod.getInstance());

Je ne l'ai pas essayée sans LinkMovementMethod mais maintenant je vais bien car ça marche enfin. Les autres réponses ne fonctionnaient pas pour moi ou concernaient du texte URL visible, pas du texte cliquable en tant que lien.

0
Renetik

Ajoutez ces lignes de code à votre textView dans xml File, cela fonctionnera parfaitement.

Android:autoLink="web" Android:textColorLink="@Android:color/holo_orange_dark" Android:linksClickable="true"

ou si vous voulez créer votre propre lien dans textview, ajoutez ces lignes de code dans votre fichier Java

  final SpannableString s = new SpannableString("https://play.google.com/store/apps/details?id=cn.wps.moffice_eng");
  Linkify.addLinks(s, Linkify.ALL);

définir la chaîne 's' dans votre TextView par fonction

Textview.setText(s);

et n'oubliez pas d'ajouter cette ligne

 ((TextView)findViewById(Android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());

id sera votre textview id

Prendre plaisir ...

0
Tarun Grover

Si vous affichez dans textview la chaîne de strings.xml, les chaînes contenant le lien Web ne doivent pas avoir Word "a href =". Si ces mots sont supprimés du fichier strings.xml, le lien fonctionnera.

0
Dharam Jindal