wake-up-neo.com

Links in TextView

Ich muss einen Link in eine TextView einfügen. Ich habe eine Zeichenfolge, die den Tag <a href="link">Text for link</a> und einen anderen Text enthält .. Das Problem ist, dass ich den Text sehen kann, wenn ich das Projekt ausführe, aber nicht anklickbar ist. Ich habe auch mit dem <b>-Tag versucht zu sehen, ob das funktioniert und es scheint auch, dass es nicht funktioniert.

Wie kann ich erreichen, dass dies ohne die Verwendung von Linkify funktioniert? 

51
Cata

Vielen Dank für Ihre Hilfe.

Ich habe es geschafft, diese Arbeit zu machen, nachdem ich einige Beispiele in den Android-Beispielen gefunden habe.

hier ist der code:

textView.setText(Html.fromHtml(
            "<b>text3:</b>  Text with a " +
            "<a href=\"http://www.google.com\">link</a> " +
            "created in the Java source code using HTML."));
textView.setMovementMethod(LinkMovementMethod.getInstance());

Hoffe, das hilft anderen ...

114
Cata

Links aus HTML heraus zu bekommen, ist ziemlich schwierig:

  1. Wenden Sie Ihren Text über xml Android:text="@string/… oder über setText() an (siehe andere Antworten).

  2. Verwenden Sie textView.setMovementMethod(LinkMovementMethod.getInstance()), um Links anklickbar zu machen (siehe andere Antworten).

  3. Fügen SieNICHTAndroid:autoLink="web" zu Ihrer XML-Ressource hinzu (Abschnitt TextView), andernfalls werden A-Tags nicht korrekt gerendert und können nicht mehr angeklickt werden.

Bemerkung 1:
Die OnClickListener kann hilfreich sein, wenn Ihre TextView nur einen Link enthält und Sie die Navigation auslösen möchten, auch wenn der Benutzer Ihren Link zur Seite klickt, jedoch innerhalb der TextView.

Bemerkung 2:
Android:linksClickable="true" funktioniert immer noch nicht (ab Android 3.2), verwenden Sie p. 2 stattdessen

41

Linkify ist die Klasse, die Sie zum Erstellen von Links verwenden müssen. BTW, was ist der Grund dafür, Linkify nicht zu verwenden?

Sie können den gesamten Text in Ihrer Textansicht für Aktionen wie das Besuchen einer Website oder das Anrufen einer auf dem Schema basierenden Telefonnummer verknüpfen. Android bietet die einfachste Möglichkeit, dies zu tun. Betrachten Sie den folgenden Code.

TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);

Für das Erstellen von benutzerdefinierten Links bietet dieselbe Linkify-Klasse verschiedene Optionen. Google hat einen Blogpost dazu veröffentlicht.

28
Gopinath

Ich konnte es nicht verstehen, aber schließlich funktionierte es, als ich etwas tat:

tvTermsOfUse.setText(Html.fromHtml(getString(R.string.tv_terms_of_use_html)));
Linkify.addLinks(tvTermsOfUse, Linkify.ALL);
tvTermsOfUse.setMovementMethod(LinkMovementMethod.getInstance());

Die Textansicht sieht folgendermaßen aus:

<TextView
    Android:id="@+id/tv_terms_of_use"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true"
    Android:layout_centerHorizontal="true"
    Android:textAlignment="gravity"
    Android:gravity="center"
    Android:textColor="@Android:color/white"
    Android:textSize="15sp" />

und string res:

<string name="tv_terms_of_use_html">
    <![CDATA[This is link to <a href="http://google.com/">Google</a>.]]>
</string>

Wichtiger Teil: Der Linkify.addLinks muss vortvTermsOfUse.setMovementMethod ausgeführt werden, sonst funktioniert es nicht. 

In XML sind keine weiteren Einstellungen erforderlich.

Ich habe rund eine Stunde gebraucht, um es selbst herauszufinden, ich hoffe, es hilft jemandem.

EDIT:

Laut @rfellons Kommentar

Vielen Dank. Auch für mich funktioniert ... ABER nur mit 

<uses-permission Android:name="Android.permission.INTERNET"/>

in Manifest.xml. – rfellons 7. September um 13:31

Stellen Sie sicher, dass Sie es auch überprüfen.

23
Damian Walczak

Benutzen

Android:linksClickable="true"
Android:autoLink="web"
20
sonida

Ich kann aus irgendeinem Grund nicht auf Ihre Antwort antworten. Ich wollte nur sagen, dass Sie textView.setText weglassen können und es einfach in eine String-Ressource einfügen können, und dies mit Android:text einstellen können. Sie müssen nur die textView.setMovementMethod(LinkMovementMethod.getInstance()); behalten; leider funktioniert Android:linksClickable="true" alleine nicht.

3
Kevin

Die Lösung: Linkify.addLinks(chatText,Linkify.ALL);

1
manav patadia

Das funktioniert ziemlich korrekt: (In Textview-Eigenschaften in XML-Datei)

Android:autolink="web"
0
Saurabh

Um die Links dynamisch hinzuzufügen (vom Server abgerufen), funktioniert dies:

textView.setText(Html.fromHtml(
                "<a href=" + response.getLink()
                        + ">" + context.getString(R.string.link_from_server) + "</a> "));

und in XML Folgendes hinzufügen:

Android:linksClickable="true"

Wenn Ihre strings.xml folgendes hat:

<string name="link_from_server">Dynamic Link</string>

Dadurch wird Ihrer Textansicht "Dynamic Link" hinzugefügt. Wenn Sie darauf tippen, wird der Link angezeigt, den Sie von Ihrem Server erhalten haben.

0
cgr