Ich habe die folgende Textansicht 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>
Wo @string/txtCredits
ist eine String-Ressource, die enthält <a href="some site">Link text</a>
.
Android hebt die Links in der Textansicht hervor, sie reagieren jedoch nicht auf Klicks. Kann mir jemand sagen, was ich falsch mache? Muss ich in meiner Aktivität einen onClickListener für die Textansicht festlegen, um so etwas Einfaches zu erreichen?
Sieht so aus, als hätte es damit zu tun, wie ich meine String-Ressource definiere. Das funktioniert nicht:
<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
Aber das tut:
<string name="txtCredits">www.google.com</string>
Das ist ein Mist, weil ich lieber einen Textlink als die vollständige URL anzeigen würde.
android:focusable="true"
löste mein ProblemAntworten:
In den API-Demos vergraben fand ich die Lösung für mein Problem:
Link.java:
Ich habe die meisten Attribute in meiner Textansicht entfernt, um sie an die Demo anzupassen.
Das hat es gelöst. Ziemlich schwer aufzudecken und zu reparieren.
Wichtig : Vergessen Sie nicht zu entfernen,
autoLink="web"
wenn Sie anrufensetMovementMethod()
.quelle
Ich benutze nur
android:autoLink="web"
und es funktioniert gut. Ein Klick auf den Link öffnet den Browser und zeigt die richtige Seite.Eine Sache, die ich vermuten könnte, ist, dass sich eine andere Ansicht über dem Link befindet. Etwas, das transparent ist, füllt das gesamte übergeordnete Element aus, zeigt jedoch nichts über dem Link an. In diesem Fall wechselt der Klick zu dieser Ansicht anstelle des Links.
quelle
Nachdem ich einige Zeit damit verbracht habe, habe ich Folgendes festgestellt:
android:autoLink="web"
funktioniert, wenn Sie vollständige Links in Ihrem HTML haben. Folgendes wird blau hervorgehoben und kann angeklickt werden:view.setMovementMethod(LinkMovementMethod.getInstance());
funktioniert mit folgenden Funktionen (wird hervorgehoben und anklickbar):Beachten Sie, dass die dritte Option einen Hyperlink enthält, die Beschreibung des Links (der Teil zwischen den Tags) selbst jedoch kein Link ist.
android:autoLink="web"
funktioniert NICHT mit solchen Links.android:autoLink="web"
Wenn in XML festgelegt, wird überschriebenview.setMovementMethod(LinkMovementMethod.getInstance());
(dh Links der dritten Art werden hervorgehoben, können aber nicht angeklickt werden).Die Moral der Geschichte ist die Verwendung
view.setMovementMethod(LinkMovementMethod.getInstance());
in Ihrem Code und stellen Sie sicher, dass Sie nichtandroid:autoLink="web"
in Ihrem XML-Layout haben, wenn Sie möchten, dass alle Links anklickbar sind.quelle
<a href="http://www.google.com">Go to Google</a>
dies bei autoLink nicht funktioniert. Für so viele Antworten auf SO ist dies die einzige, die es erwähnt hat. Vielen Dank!Die oben genannten Lösungen haben bei mir nicht funktioniert, aber die folgenden haben funktioniert (und es scheint ein bisschen sauberer zu sein).
Definieren Sie zunächst in der Zeichenfolgenressource die Chevrons zum Öffnen von Tags mithilfe der HTML-Entitätscodierung, dh:
und nicht:
Codieren Sie im Allgemeinen alle Chevrons in der Zeichenfolge so. Übrigens muss der Link mit beginnen
http://
Stellen Sie dann (wie hier vorgeschlagen ) diese Option in Ihrer Textansicht ein:
Führen Sie schließlich im Code Folgendes aus:
Das war's, keine regulären Ausdrücke oder andere manuelle Hacks erforderlich.
quelle
%20
<![CDATA[ ... ]]>
Tag einschließen.<![CDATA[...]]>
Tag.Ich habe das einfach benutzt
macht die hier anklickbaren Links anklickbar
quelle
<a href...
anklickbarWenn Sie einen HTML-ähnlichen Link hinzufügen möchten, müssen Sie lediglich Folgendes tun:
Fügen Sie eine HTML-ähnliche Zeichenfolge für Ressourcen hinzu:
Fügen Sie Ihre Ansicht dem Layout ohne linksspezifische Konfiguration hinzu:
Fügen Sie Ihrer TextView programmgesteuert die entsprechende MovementMethod hinzu:
Das ist es! Und ja, Optionen wie "autoLink" und "linksClickable", die nur an expliziten Links arbeiten (nicht in HTML-Tags eingeschlossen), sind für mich auch sehr irreführend ...
quelle
Ich habe diese Zeile hinzugefügt zu
TextView
:android:autoLink="web"
Unten finden Sie ein Beispiel für die Verwendung in einer Layoutdatei.
layout.xml
Stichprobestring.xml
quelle
Das Folgende sollte für alle funktionieren, die nach einer Kombination aus Text und Hyperlink in einer Android-App suchen.
Im
string.xml
:Jetzt können Sie dies nutzen
string
in jeder gegebenenView
wie folgt aus :Führen Sie nun in Ihrer Aktivität oder Ihrem Fragment Folgendes aus:
Inzwischen müssen Sie nicht mehr einstellen
android:autoLink="web"
android:linksClickable="true"
diesen Ansatz oder verwenden.Ich hoffe, Sie finden das hilfreich.
quelle
Ich hoffe, dies wird dir helfen;
quelle
android:autoLink=?
von Ihrem entfernenTextView
.android:autoLink=?
ist wichtig!Nur was brauchen Sie, um dies in der Textansicht in XML hinzuzufügen
quelle
Das Einfachste, was für mich funktioniert hat, ist die Verwendung von Linkify
und es erkennt automatisch die Web-URLs aus dem Text in der Textansicht.
quelle
Richard, beim nächsten Mal sollten Sie diesen Code stattdessen unter TextView im Layout-XML hinzufügen.
Das sollte so sein.
Sie müssen diesen Code nicht verwenden (
t2.setMovementMethod(LinkMovementMethod.getInstance());
) nicht verwenden, um den Link anklickbar zu machen.Hier ist auch die Wahrheit: Solange Sie den autoLink und die linksClickable festlegen , vergessen Sie nicht, diese in der Datei String.xml hinzuzufügen, damit der anklickbare Link funktioniert.
quelle
mithilfe von linkify : Linkify verwendet einen Text und einen regulären Ausdruck und wandelt alle Regex-Übereinstimmungen im Text in anklickbare Links um
Vergiss es nicht
quelle
Hier ist ein einzeiliger Android-Code, mit dem Telefon und URL in textView ausgewählt werden können, unabhängig davon, was Zeichenfolge und was Daten sind. Sie müssen hierfür keine HTML-Tags verwenden.
quelle
Mir ist aufgefallen, dass mit
android:autoLink="web"
sofunktionierte für URLs in Ordnung, aber da ich eine E-Mail-Adresse und eine Telefonnummer hatte, die ich ebenfalls verknüpfen wollte, habe ich diese Zeile
android:autoLink="all"
wie folgt verwendetund es funktionierte wie ein Zauber.
quelle
Verwalten der Linkify-Textfarbe auch
quelle
Achten Sie darauf, nicht verwenden
setAutoLinkMask(Linkify.ALL)
bei der VerwendungsetMovementMethod(LinkMovementMethod.getInstance())
undHtml.fromHTML()
auf richtig formatiertHTML
Links (zum Beispiel<a href="http://www.google.com/">Google</a>
).quelle
Benutze das...
und fügen Sie die Berechtigung in die Manifestdatei ein
quelle
Sie brauchen nur das:
Fügen Sie diese Zeile in TextView ein, die mit Bezug auf das Web angeklickt werden kann. URL-Adresse als Text dieser Textansicht festgelegt.
Beispiel:
quelle
Die akzeptierte Antwort ist korrekt, ABER es bedeutet, dass Telefonnummern, Karten, E-Mail-Adressen und reguläre Links, z. B.
http://google.com
ohne href-Tags, NICHT MEHR anklickbar sind, da Sie keinen automatischen Link in der XML haben können.Die einzige vollständige Lösung, mit der ALLES, was ich gefunden habe, anklickbar ist, ist die folgende:
Und die TextView sollte NICHT haben
android:autolink
. Es besteht auch keine Notwendigkeit dafürandroid:linksClickable="true"
; Es ist standardmäßig wahr.quelle
myapp://
Schemata (für Deep Linking).So löste ich klickbare und sichtbare Links in einer Textansicht (per Code)
quelle
Verwenden Sie den folgenden Code:
quelle
[Tested in Pre-lollipop as well as in Lollipop and above]
Sie können Ihre HTML-Zeichenfolge aus dem Backend oder aus Ihren Ressourcendateien abrufen. Wenn Sie Ihren Text als Ressourcenzeichenfolge einfügen, müssen Sie das folgende
CDATA
Tag hinzufügen :Dann müssen Sie im Code die Zeichenfolge abrufen, als HTML zuweisen und eine Linkbewegungsmethode festlegen:
quelle
Der Grund, warum Sie das Problem haben, ist, dass nur versucht wird, "nackte" Adressen zu finden. Dinge wie "www.google.com" oder " http://www.google.com ".
Das Ausführen Ihres Textes über Html.fromHtml () sollte den Trick tun. Sie müssen es programmatisch tun, aber es funktioniert.
quelle
Ich weiß nicht, ob es sich lohnt, eine weitere Antwort hinzuzufügen, aber nur für den Fall ...
Ich musste dies an einigen Stellen suchen, bekam aber endlich diese Version des Codes zum Laufen.
string.xml:
myactivity.xml:
myactivty.java (in onCreate ()):
Dies erzeugt zwei anklickbare Hyperlinks mit dem Text
link text1
undlink text2
dem umleiten der Benutzer googeln.quelle
Autolink-Telefon funktioniert bei mir nicht. Das Folgende wirkte wie ein Zauber,
quelle
Wenn Sie XML-basiertes TextView verwenden, müssen Sie für Ihre Anforderung nur zwei Dinge tun:
Identifizieren Sie Ihren Link in der Zeichenfolge, z. B. "Dies ist meine Webseite". Sie können es in XML oder im Code hinzufügen.
Fügen Sie in der XML-Datei mit der Textansicht Folgendes hinzu:
quelle
Fügen Sie Ihrer Zeichenfolgenressource CDATA hinzu
Strings.xml
quelle
Ich benutze den Autolink, um den Text "automatisch zu unterstreichen", habe aber gerade einen "onClick" gemacht, der ihn verwaltet. (Ich bin selbst auf dieses Problem gestoßen)
Erfordert keine Berechtigungen, da Sie die Absicht an Apps weitergeben, die diese Ressourcen verwalten (IE-Browser).
Das hat bei mir funktioniert. Viel Glück.
quelle
Nur so viel Zeit verschwendet, um herauszufinden, dass Sie getText (R.string.whatever) anstelle von getString (R.string.whatever) verwenden müssen ...
Wie auch immer, hier ist, wie ich meine zum Arbeiten gebracht habe. Mit mehreren Hyperlinks in derselben Textansicht.
Zeichenfolgenbeispiel
quelle