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.

4voto

user1995307 Punkte 697

Autolink Telefon hat bei mir nicht funktioniert. Die folgenden funktionierte wie ein Charme,

TextView tv = (TextView) findViewById(R.id.emergencynos);
String html2="<br><br>Fire - <b><a href=tel:997>997</a> </b></br></br>";
tv.append(Html.fromHtml(html2));
tv.setMovementMethod(LinkMovementMethod.getInstance());

3voto

Ajay Kulkarni Punkte 2708

Mein Code sah folgendermaßen aus:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/link"
    android:text="@string/forgot"
    android:layout_marginTop="16dp"
    android:gravity="center"
    android:linksClickable="true"/>

Mein Java-Code sah folgendermaßen aus:

/*TextView action*/
        TextView textView = (TextView) findViewById(R.id.link);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
        textView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginActivity.this,forgot.class));
            }
        });  

Dieser verweist lediglich auf eine andere Aktivität. Aber dieser Link ist klickbar und funktioniert reibungslos. Getestet in Android Studio 1.5 (Vorschau)

3voto

onaclov2000 Punkte 5491

Ich verwende den Autolink, um den Text automatisch zu unterstreichen, aber ich habe gerade ein "onClick" erstellt, das dies verwaltet (ich bin selbst auf dieses Problem gestoßen).

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"
    android:textSize="18dp"
    android:autoLink="all"
    android:text="@string/twitter"
    android:onClick="twitter"/>

public void twitter (View view)
{
    try
    {
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://twitter.com/onaclovtech"));
        startActivity(browserIntent);
    }
    finally
    {
    }
}

Es sind keine Berechtigungen erforderlich, da Sie die Absicht an Anwendungen weitergeben, die diese Ressourcen verwalten (d. h. den Browser).

Das hat bei mir funktioniert.

1voto

Muntashir Akon Punkte 6649

Verwenden Sie dies:

package com.stackoverflow.java.android;

import android.content.Context;
import android.text.method.LinkMovementMethod;
import android.text.method.MovementMethod;
import android.util.AttributeSet;

import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;

public class HyperlinkTextView extends AppCompatTextView {
    public HyperlinkTextView(Context context) {
        super(context);
    }

    public HyperlinkTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public HyperlinkTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * Set default movement method to {@link LinkMovementMethod}
     * @return Link movement method as the default movement method
     */
    @Override
    protected MovementMethod getDefaultMovementMethod() {
        return LinkMovementMethod.getInstance();
    }
}

Nun, einfach mit com.stackoverflow.java.android.HyperlinkTextView anstelle von TextView in Ihren Layoutdateien wird Ihr Problem lösen.

1voto

Monster Brain Punkte 1798

Für diejenigen, die Probleme mit Strings haben, die aus XML-Inhalten gelesen und dynamisch zugewiesen werden.

Falls Sie Text aus einer strings.xml Ressource, scheint es, dass die HTML-Tags werden entfernt .

Sie müssen also Folgendes verwenden <![CDATA[**your string with click links**]]> en el strings.xml Datei, um sie in HTML zu konvertieren, mit Html.fromHtml(string) .

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