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?
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);
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>
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
Es gibt zwei Fälle:
"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"/>
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());
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://");
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>
In Ihrem XML müssen Sie Android:linksClickable="true"
in der TextView hinzufügen.
versuchen Sie es mit diesem https://saket.me/better-url-handler-textview-Android/
Es ist eine sehr gute Lösung und einfach
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.
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 ...
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.