Ссылки в TextView - PullRequest
       3

Ссылки в TextView

52 голосов
/ 25 января 2011

Мне нужно поместить ссылку в TextView, у меня есть строка, содержащая тег <a href="link">Text for link</a> и некоторый другой текст. Проблема в том, что если я запускаю проект, я вижу текст, но он не кликабелен. Я тоже попробовал с тегом <b> проверить, работает ли он, и кажется, что он тоже не работает.

Как я могу заставить это работать без использования Linkify?

Ответы [ 9 ]

114 голосов
/ 25 января 2011

Спасибо за помощь всем.

Мне удалось сделать эту работу после того, как я нашел несколько примеров в образцах Android.

вот код:

textView.setText(Html.fromHtml(
            "<b>text3:</b>  Text with a " +
            "<a href=\"http://www.google.com\">link</a> " +
            "created in the Java source code using HTML."));
textView.setMovementMethod(LinkMovementMethod.getInstance());

Надеюсь, что это поможет другим ...

41 голосов
/ 01 августа 2011

Получить ссылки, работающие с html, довольно сложно:

  1. Примените свой текст через xml android:text="@string/… или через setText() (см. Другие ответы)

  2. Используйте textView.setMovementMethod(LinkMovementMethod.getInstance()), чтобы сделать ссылки кликабельными (см. Другие ответы)

  3. Делать НЕ добавлять android:autoLink="web" к вашему XML-ресурсу (раздел TextView), в противном случае A-теги отображаются неправильно и больше не доступны для клика.

Примечание 1:
OnClickListener может быть полезным, если ваш TextView содержит только одну ссылку, и вы хотите запустить навигацию, даже если пользователь нажимает вашу ссылку, но внутри TextView.

Примечание 2:
android:linksClickable="true" по-прежнему не работает (начиная с Android 3.2), используйте p. 2 вместо

28 голосов
/ 25 января 2011

Linkify - это класс, который вы должны использовать для создания ссылок. Кстати, в чем причина не использовать Linkify?

Вы можете связать весь текст в вашем текстовом представлении для таких действий, как посещение веб-сайта или вызов телефонного номера на основе схемы. Android предоставляет самый простой способ сделать это. Рассмотрим приведенный ниже код.

TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);

Для создания пользовательских ссылок один и тот же класс Linkify предоставляет различные параметры. Google опубликовал пост на этом .

23 голосов
/ 08 марта 2013

Я не мог понять это, но в конце концов он начал работать, когда я сделал что-то вроде:

tvTermsOfUse.setText(Html.fromHtml(getString(R.string.tv_terms_of_use_html)));
Linkify.addLinks(tvTermsOfUse, Linkify.ALL);
tvTermsOfUse.setMovementMethod(LinkMovementMethod.getInstance());

Вид текста выглядит так:

<TextView
    android:id="@+id/tv_terms_of_use"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:textAlignment="gravity"
    android:gravity="center"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

и строка res:

<string name="tv_terms_of_use_html">
    <![CDATA[This is link to <a href="http://google.com/">Google</a>.]]>
</string>

Важная часть: Linkify.addLinks необходимо сделать до tvTermsOfUse.setMovementMethod, иначе он не будет работать.

Никаких других настроек в XML не требуется.

Мне потребовалось около часа, чтобы самому разобраться, надеюсь, что это кому-нибудь поможет.

Согласно комментарию @rfellons

Спасибо.Также у меня работает ... НО только с

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

на Manifest.xml.- rfellons 7 сентября в 13: 31

Обязательно проверяйте также.

20 голосов
/ 07 декабря 2012

Использование

android:linksClickable="true"
android:autoLink="web"
3 голосов
/ 04 апреля 2011

Я не могу ответить на ваш ответ по какой-то причине;Я просто хотел сказать, что вы можете опустить textView.setText и просто поместить его в строковый ресурс, и установить его, используя android:text.Вам просто нужно сохранить textView.setMovementMethod(LinkMovementMethod.getInstance());;к сожалению android:linksClickable="true" само по себе не работает.

1 голос
/ 17 апреля 2015

Решение: Linkify.addLinks(chatText,Linkify.ALL);

0 голосов
/ 05 августа 2015

Чтобы добавить ссылки динамически (выбирается с сервера), это работает:

textView.setText(Html.fromHtml(
                "<a href=" + response.getLink()
                        + ">" + context.getString(R.string.link_from_server) + "</a> "));

и в XML добавить это:

android:linksClickable="true"

Если ваш strings.xml имеет это:

<string name="link_from_server">Dynamic Link</string>

Это добавит «Динамическую ссылку» к вашему текстовому представлению и, если вы коснетесь этого, перейдет по ссылке, предоставленной вашим сервером.

0 голосов
/ 08 апреля 2015

Это работает довольно корректно: (в свойствах textview, внутри xml-файла)

android:autolink="web"
...