webentwicklung-frage-antwort-db.com.de

Android aktiver Link von URL in TextView

Ich habe dynamischen Text von einem Webdienst erhalten und diesen in einer TextView anzeigen lassen. Manchmal hat die TextView eine URL wie <a href="http://hello.com">hello</a>. Ich habe den Text mit folgendem Code festgelegt.

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

Und setze auch Android:autoLink="web" in der entsprechenden XML, die die TextView enthält. Jetzt wird der Link richtig mit blauer Farbe und Unterstrichen angezeigt, aber ich habe festgestellt, dass dies nur ein toter Link ist. Es passiert nichts, wenn wir versuchen, darauf zu klicken. Was muss ich tun, um den Link zu aktivieren?

48
dev_android

Nach erneuter Betrachtung aller Lösungen eine Zusammenfassung mit einigen Erklärungen:

Android:autoLink="web" 

findet eine URL und erstellt einen Link, auch wenn Android: linksClickable nicht festgelegt ist; Links sind standardmäßig anklickbar. Sie müssen die URL nicht alleine lassen, selbst wenn sie mitten in einem Text ist, wird sie erkannt und kann angeklickt werden.

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

Um einen Link über den Code zu setzen, dasselbe Prinzip, keine Notwendigkeit für Muster oder Android: AutoLink im Layout, wird der Link automatisch mit Linkify gefunden:

  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.

Das funktioniert für mich:

<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

Zu jeder Zeit speichern ist die wahre Lösung 

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

und ich benutze es und es funktioniert perfekt 

13
M.Ali El-Sayed

Es gibt zwei Fälle:

  • der Text sieht aus wie "click on http://www.hello.com"

dann müssen Sie lediglich das Attribut autoLink in der XML-Datei festlegen, damit der Link automatisch im Text erkannt wird:

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:autoLink="web"
    Android:text="click on http://www.hello.com"/>
  • der Text sieht aus wie click on <a href="http://hello.com">hello</a>

dann müssen Sie es per Code tun und sagen, dass der Text HTML ist, und eine Link-Verschiebungsmethode für den Klick angeben:

    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

Schauen Sie sich diesen Ansatz an:

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

ich habe eine Idee gegeben, die ich gefunden habe

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

In Ihrem XML müssen Sie Android:linksClickable="true" in der TextView hinzufügen.

2
LuxuryMode

versuchen Sie es mit diesem https://saket.me/better-url-handler-textview-Android/

Es ist eine sehr gute Lösung und einfach

1
SAndroidD

Antwort ist richtig, ABER nicht vollständig, da ich in meiner xml einige Eigenschaften von anderen Antworten wie autoLink und linksClickable hatte und programmatische Weise nicht funktionierte. Auch wenn ich einen String mit HTML aus einer String-Ressource übergebe, hat das nicht funktioniert. Also pass auf, dass du deinen XML-Code bereinigen und den String genau wie in dieser Antwort übergeben musst.

    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());

Ich habe es nicht ohne LinkMovementMethod ausprobiert, aber jetzt bin ich in Ordnung, da es endlich funktioniert. Andere Antworten haben für mich nicht funktioniert oder waren für sichtbaren URL-Text, nicht anklickbaren Text als Link.

0
Renetik

Fügen Sie diese Codezeilen zu Ihrer textView in der xml-Datei hinzu, es funktioniert einwandfrei.

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

oder wenn Sie einen eigenen Link in textview haben möchten, fügen Sie diese Codezeilen in Ihre Java-Datei ein

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

setze den 's' String in deine TextView nach Funktion

Textview.setText(s);

und vergessen Sie nicht, diese Zeile hinzuzufügen

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

id wird deine textview id sein

Genießen ...

0
Tarun Grover

Wenn Sie in textview den String aus strings.xml anzeigen, sollten Strings, die den Weblink enthalten, Word "a href =" nicht enthalten. Wenn diese Wörter aus der Datei strings.xml gelöscht werden, funktioniert der Link.

0
Dharam Jindal