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.

1349voto

Richard Punkte 28061

Versteckt in den API-Demos fand ich die Lösung für mein Problem:

Datei Link.java :

    // text2 has links specified by putting <a> tags in the string
    // resource.  By default these links will appear but not
    // respond to user input.  To make them active, you need to
    // call setMovementMethod() on the TextView object.

    TextView t2 = (TextView) findViewById(R.id.text2);
    t2.setMovementMethod(LinkMovementMethod.getInstance());

Ich habe die meisten Attribute meiner TextView entfernt, um sie an die der Demo anzupassen.

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/txtCredits"/>

Damit ist das Problem gelöst. Es ist ziemlich schwierig, das Problem aufzudecken und zu beheben.

Wichtig : Vergessen Sie nicht zu entfernen autoLink="web" wenn Sie anrufen setMovementMethod() .

592voto

Janusz Punkte 181894

Ich verwende nur android:autoLink="web" und es funktioniert gut. Ein Klick auf den Link öffnet den Browser und zeigt die richtige Seite an.

Ich könnte mir vorstellen, dass sich über dem Link eine andere Ansicht befindet. Etwas, das transparent ist, füllt den gesamten übergeordneten Bereich aus, zeigt aber nichts oberhalb des Links an. In diesem Fall geht der Klick auf diese Ansicht statt auf den Link.

466voto

Jeshurun Punkte 22314

Nachdem ich einige Zeit damit verbracht habe, habe ich festgestellt, dass:

  • android:autoLink="web" funktioniert, wenn Sie vollständige Links in Ihrem HTML-Code haben. Das Folgende wird blau hervorgehoben und ist anklickbar:
  • Einige Texte <a href="http://www.google.com">http://www.google.com</a>
  • Einige Texte http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); funktioniert mit dem Folgenden (wird hervorgehoben und anklickbar sein):
  • Einige Texte <a href="http://www.google.com">http://www.google.com</a>
  • Einige Texte http://www.google.com
  • Einige Texte <a href="http://www.google.com">Go to Google</a>

Beachten Sie, dass die dritte Option einen Hyperlink enthält, aber die Beschreibung des Links (der Teil zwischen den Tags) selbst ist kein Link. android:autoLink="web" hace NICHT mit solchen Links arbeiten.

  • android:autoLink="web" wenn in XML festgelegt, überschreibt view.setMovementMethod(LinkMovementMethod.getInstance()); (d.h. Links der dritten Art werden hervorgehoben, sind aber nicht anklickbar).

Die Moral von der Geschicht' ist die Verwendung view.setMovementMethod(LinkMovementMethod.getInstance()); in Ihrem Code und stellen Sie sicher, dass Sie keine android:autoLink="web" in Ihrem XML-Layout, wenn Sie wollen tous Links anklickbar sein sollen.

109voto

Błażej Czapp Punkte 2289

Die oben genannten Lösungen haben bei mir nicht funktioniert, aber die folgende schon (und sie scheint ein bisschen sauberer zu sein).
Definieren Sie zunächst in der String-Ressource Ihre Tag-Öffnungszeichen unter Verwendung der HTML-Entity-Kodierung, d. h.:

&lt;a href="http://www.google.com">Google&lt;/a>

Und pas :

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

Verschlüsseln Sie im Allgemeinen alle Chevrons in der Zeichenkette auf diese Weise. Übrigens, der Link muss mit http://

Dann (wie vorgeschlagen aquí ) setzen Sie diese Option in Ihrer TextView:

 android:linksClickable="true"

Schließlich, in Code, tun:

((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));

Das war's. Es sind keine regulären Ausdrücke oder andere manuelle Hacks erforderlich.

90voto

jai_b Punkte 1063

Ich habe einfach das hier benutzt:

Linkify.addLinks(TextView, Linkify.ALL);

Sie macht die Links anklickbar, da aquí .

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