Как сделать ссылки в TextView кликабельными? - PullRequest
924 голосов
/ 29 апреля 2010

У меня определено следующее TextView:

<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>

где @string/txtCredits - строковый ресурс, содержащий <a href="some site">Link text</a>.

Android выделяет ссылки в TextView, но они не реагируют на нажатия. Может кто-нибудь сказать мне, что я делаю не так? Должен ли я установить onClickListener для TextView в моей деятельности для чего-то такого простого?

Похоже, это связано с тем, как я определяю свой строковый ресурс. Это не работает:

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

Но это так:

<string name="txtCredits">www.google.com</string>

Что является обломом, потому что я бы предпочел показать текстовую ссылку, чем показывать полный URL.

Ответы [ 33 ]

1 голос
/ 09 ноября 2015

Мой код был такой:

<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"/>

Мой код Java был таким:

/*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));
            }
        });  

Это просто указывает на ссылку на другой вид деятельности. Но эта ссылка кликабельна и работает плавно. Протестировано в Android Studio 1.5 (превью)

1 голос
/ 12 августа 2015

Просто потратили так много времени, чтобы понять, что вы должны использовать getText (R.string.whhaps) вместо getString (R.string.whwhat) ...

В любом случае, вот как я начал работать. С несколькими гиперссылками в том же текстовом представлении тоже.

    TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView);
    termsTextView.append("By registering your account, you agree to our ");
    termsTextView.append(getText(R.string.terms_of_service));
    termsTextView.append(", ");
    termsTextView.append(getText(R.string.fees));
    termsTextView.append(", and the ");
    termsTextView.append(getText(R.string.stripe_connected_account_agreement));

    termsTextView.setMovementMethod(LinkMovementMethod.getInstance());



            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/termsTextView"/>

пример строки

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>
0 голосов
/ 04 сентября 2015

Поскольку отсутствует привязка данных , я хотел бы поделиться своим решением для привязки данных TextViews, поддерживающих HTML-теги с интерактивными ссылками.

Чтобы избежать извлечения каждого текстового представления и предоставления им поддержки html с помощью From.html, мы расширяем TextView и помещаем логику в setText()

public class HtmlTextView extends TextView {

    public HtmlTextView(Context context) {
        super(context);
    }

    public HtmlTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public HtmlTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        super.setText(Html.fromHtml(text.toString()), type);
        this.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

Я сделал суть , которая также показывает пример сущности и представление для использования этого.

...