1159 Stimmen

Wie man Links in einer TextView anklickbar macht

Ich habe die folgende TextView definiert:

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="@string/txtCredits"
    android:autoLink="web" android:id="@+id/infoTxtCredits"
    android:layout_centerInParent="true"
    android:linksClickable="true"></TextView>

donde @string/txtCredits ist eine String-Ressource, die Folgendes enthält <a href="some site">Link text</a> .

Android hebt die Links in der TextView hervor, aber sie reagieren nicht auf Klicks. Was mache ich falsch? Muss ich einen onClickListener für die TextView in meiner Aktivität für etwas so Einfaches wie dies festlegen?

Es sieht so aus, als ob es mit der Art und Weise zu tun hat, wie ich meine String-Ressource definiere.

Das funktioniert nicht:

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

Aber das hier schon:

<string name="txtCredits">www.google.com</string>

Das ist schade, denn ich würde viel lieber einen Textlink anzeigen als die vollständige URL.

12voto

Androdos Punkte 613

Sie brauchen nur dies:

android:autoLink="web"

Fügen Sie diese Zeile in eine TextView ein, die mit einem Verweis auf das Web angeklickt werden kann. Die URL wird als Text dieses TextViews gesetzt.

Beispiel:

 <TextView
    android:id="@+id/textViewWikiURL"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textStyle="bold"
    android:text="http://www.wikipedia.org/"
    android:autoLink="web" />

9voto

Phuc Tran Punkte 6595

Verwenden Sie den folgenden Code:

String html = "<a href=\"http://yourdomain.com\">Your Domain Name</a>"
TextView textview = (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(LinkMovementMethod.getInstance());
textview.setText(Html.fromHtml(html));

9voto

Dominic Punkte 3213

So habe ich anklickbare und sichtbar Links in einer TextView (per Code)

private void setAsLink(TextView view, String url){
    Pattern pattern = Pattern.compile(url);
    Linkify.addLinks(view, pattern, "http://");
    view.setText(Html.fromHtml("<a href='http://" + url + "'>http://" + url + "</a>"));
}

8voto

Benny Punkte 1465

[Tested in Pre-lollipop as well as in Lollipop and above]

Sie können Ihre HTML-Zeichenfolge aus dem Backend oder aus Ihren Ressourcen-Dateien beziehen. Wenn Sie Ihren Text als Ressourcenkette einfügen, achten Sie darauf, dass Sie die CDATA Tag:

<string name="your_text">![CDATA[...<a href="your_link">Link Title</a>  ...]]</string>

Im Code müssen Sie dann die Zeichenkette abrufen, sie als HTML zuweisen und eine Link-Bewegungsmethode festlegen:

String yourText = getString(R.string.your_text);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   textView.setText(Html.fromHtml(yourText, Html.FROM_HTML_MODE_COMPACT));
} else {
   textView.setText(Html.fromHtml(yourText));
}

try {
   subtext.setMovementMethod(LinkMovementMethod.getInstance());
} catch (Exception e) {
   //This code seems to crash in some Samsung devices.
   //You can handle this edge case base on your needs.
}

6voto

Jeremy Logan Punkte 46499

Der Grund für das Problem ist, dass nur "nackte" Adressen gesucht werden. Dinge wie "www.google.com" oder "http://www.google.com".

Ihren Text durchlaufen lassen Html.fromHtml() sollte das genügen. Sie müssen es programmatisch tun, aber es funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X