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.

15voto

aLearner Punkte 1053

Ich habe festgestellt, dass die Verwendung von android:autoLink="web" also

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:autoLink="web"/>

funktionierte gut für URLs, aber da ich eine E-Mail-Adresse und eine Telefonnummer hatte, die ich auch verlinken wollte, verwendete ich schließlich diese Zeile android:autoLink="all" wie diese

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:autoLink="all"/>

und es hat wunderbar funktioniert.

15voto

Kelly McKinnon Punkte 176

Die akzeptierte Antwort ist richtig, pero bedeutet dies, dass Telefonnummern, Karten, E-Mail-Adressen und reguläre Links, z. B., http://google.com ohne href-Tags wird nicht mehr anklickbar sein, da der XML-Inhalt keinen Autolink enthalten darf.

Die einzige Komplettlösung, die es gibt todo anklickbar, die ich gefunden habe, ist die folgende:

Spanned text = Html.fromHtml(myString);
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, Linkify.ALL);
for (URLSpan span : currentSpans) {
    int end = text.getSpanEnd(span);
    int start = text.getSpanStart(span);
    buffer.setSpan(span, start, end, 0);
}
textView.setText(buffer);
textView.setMovementMethod(LinkMovementMethod.getInstance());

Und die TextView sollte pas haben android:autolink . Es gibt keinen Grund für android:linksClickable="true" auch nicht; es ist standardmäßig wahr.

14voto

Programiner Punkte 146

Fügen Sie dies in Ihren Text ein:

        android:autoLink="web"
        android:linksClickable="true"

12voto

elevenfive Punkte 168

Vergewissern Sie sich, dass pas verwenden. setAutoLinkMask(Linkify.ALL) bei Verwendung von setMovementMethod(LinkMovementMethod.getInstance()) y Html.fromHTML() auf ordnungsgemäß formatierte HTML Links (zum Beispiel, <a href="http://www.google.com/">Google</a> ).

12voto

Tej Punkte 389

Verwenden Sie diese...

TextView.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
                        startActivity(in);
                    }

                });

Und fügen Sie in der Manifestdatei eine Berechtigung hinzu:

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

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