Erstellen Sie eine Hyperlink-Textansicht in Android

80

Ich möchte einen Link für einen Textansichtstext wie Google erstellen . Gibt es sowieso einen Link wie diesen zu machen. (dh) Wenn Sie auf das Wort Google klicken, sollte der entsprechende Link geöffnet werden. Ideen sind willkommen.

Srinivas
quelle
1
Verwenden Sie einfach Linkify.addLinks (TextView, Linkify.ALL).
AndroidGeek

Antworten:

135

Versuchen Sie dies und lassen Sie mich wissen, was passiert.

Verwenden von Java-Code:

TextView textView =(TextView)findViewById(R.id.textView);
textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href='http://www.google.com'> Google </a>";
textView.setText(Html.fromHtml(text));

Ab API-Ebene> = 24 Html.fromHtml(String source)ist veraltet, stattdessen verwenden fromHtml(String, int),

textView.setText(Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT));

Oder in einer Layout-XML-Datei in Ihren TextView-Widget-Attributen

android:autoLink="web"
android:linksClickable="true"
user370305
quelle
Ich habe die erwartete Ausgabe. Vielen Dank für Ihre Antwort
Srinivas
1
Wenn der Hyperlink-Text in strings.xml vorhanden ist, funktioniert keine der vorgeschlagenen Antworten. Es funktioniert auf sehr seltsame Weise. Wenn ich den Text direkt in Layout-XML einstelle, funktioniert es, aber wenn ich die Textansichtsdaten in Java-Code einstelle, funktioniert es nicht.
Velu
2
Nur um zu erwähnen, dass Sie, wenn Sie den Java-Code verwenden, android:autoLink="web"aus XML entfernen müssen . Ich hatte beides und es hat nicht funktioniert.
isntonis Papadakis
53

Verwenden Sie android:autoLink="web"in der XML-Datei von TextView. Es sollte automatisch klickbare URLs konvertieren (falls im Text gefunden)

Waqaslam
quelle
14
Schließen Sie auch android ein: linksClickable = "true"
Ajith Memana
@waqaslam in diesem Fall, wo wir einen Link setzen.
Gargs
1
@ Garg's Es ist der Text, den Sie in der Textansicht festgelegt haben und der möglicherweise Hyperlinks enthält
waqaslam
28

Alle getesteten und funktionierenden 100% igen
Lösung: android:autoLink="web"
Nachfolgend finden Sie ein vollständiges Beispiel für eine

Beispiellayout- XML

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="email"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/lostpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="web"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/defaultpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

String in string.xml

<string name="lostpassword">If you lost your password please contact <a href="mailto:[email protected]?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string>

<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>
Shanewaj
quelle
3
Es funktioniert nicht, wenn ich diese Zeile ändere > cleverfinger.com.au/user-guide/ </a> </ string > für einen anderen Text wie: Klicken Sie hier
Musculaa
2
Dies funktioniert nur, wenn der Text eine vollständige URL enthält wie: www.something.com
Rahul Tiwari
7

Dies kann auch mithilfe der Standardeigenschaft von Textview erfolgen

android:autoLink="email"
Rishabh Bhardwaj
quelle
5

Hinweis: - Html.fromHtml ist in Android N veraltet

Sie müssen überprüfen und unterstützen Android Nund höhere Versionen von Android

                  //Set clickable true
                 tagHeading.setClickable(true);
                 
                  //Handlle click event
                  tagHeading.setMovementMethod(LinkMovementMethod.getInstance());

                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>", Html.FROM_HTML_MODE_LEGACY));
                } else {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>"));
                }
 

Alternative

Sie können nicht automatisch das AutoLink-Flag in TextView hinzufügen.

android: autoLink = "web"

android: linksClickable = "true"

Auf diese Weise müssen Sie keine <a href='somelink'>Tags hinzufügen .

Das ist ein Nachteil, wenn Sie hinzufügen möchten , hyperlinkauf eine textSie es auf diese Weise nicht tun kann. zB kannst du so etwas nicht machen: - [ hiteshsahu ] [1]

           <TextView
                android:id="@+id/tag_info"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/tag_ll"
                android:layout_gravity="left"
                android:layout_margin="10dp"
                android:autoLink="web"
                android:linksClickable="true"
                android:text="https://github.com/hiteshsahu"
                android:textColor="@color/secondary_text" />

Das Ergebnis beider Ansätze:

https://github.com/hiteshsahu

Hitesh Sahu
quelle
1

Für die neueste Version des SDK fromHtmlist veraltet. Verwenden Sie die folgende Zeile

String yourtext = "<a style='text-decoration:underline' href='http://www.sample.com'> Sample Website </a>";
    if (Build.VERSION.SDK_INT >= 24) {
        textView.setText(Html.fromHtml(yourtext, Html.FROM_HTML_MODE_LEGACY));
    } else {
        textView.setText(Html.fromHtml(yourtext));
    }
Rohan Pawar
quelle