Ссылки в TextView
Мне нужно поместить ссылку в TextView
, у меня есть строка, содержащая тег <a href="link">Text for link</a>
и другой текст.
Проблема в том, что если я запускаю проект, я могу видеть текст, но он не доступен для кликов. Я тоже пробовал с тегом <b>
, чтобы убедиться, что это работает, и кажется, что он тоже не работает.
Как я могу заставить это работать без использования Linkify
?
Ответы
Ответ 1
Спасибо за вашу помощь.
Мне удалось выполнить эту работу после того, как я нашел несколько примеров в образцах 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());
Надеюсь, что это поможет другим...
Ответ 2
Получение ссылок, работающих с html, довольно сложно:
-
Примените текст через xml android:text="@string/…
или через setText()
(см. другие ответы)
-
Используйте textView.setMovementMethod(LinkMovementMethod.getInstance())
, чтобы сделать ссылки кликабельными (см. другие ответы)
- добавить
android:autoLink="web"
к вам ресурс XML (раздел TextView
), в противном случае теги A не будут отображаться правильно и больше не будут доступны./li >
Примечание 1:
OnClickListener
может быть полезна, если ваш TextView
содержит только одну ссылку и вы хотите активировать навигацию, даже если пользователь нажимает на вашу ссылку, но внутри TextView
.
Примечание 2:
android:linksClickable="true"
по-прежнему не работает (с Android 3.2), вместо этого используйте p. 2
Ответ 3
Linkify - это класс, который вы должны использовать для создания ссылок. Кстати, в чем причина не использования Linkify?
Вы можете связать весь текст в текстовом виде с такими действиями, как посещение веб-сайта или вызов телефонного номера на основе схемы. Android обеспечивает самый простой способ сделать это. Рассмотрим приведенный ниже код.
TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);
Для создания настраиваемых ссылок один и тот же класс Linkify предоставляет различные варианты.
Google опубликовал блогпост об этом.
Ответ 4
Я не мог понять это, но, наконец, он начал работать, когда я сделал что-то вроде:
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 не требуются другие настройки.
Мне понадобилось около часа, чтобы понять это, надеюсь, что это поможет кому-то.
EDIT:
Согласно комментарию @rfellons
Спасибо. Также для меня работает... НО только с
<uses-permission android:name="android.permission.INTERNET"/>
на Manifest.xml. - rfellons 7 сентября в 13:31
Обязательно проверьте его.
Ответ 5
Использование
android:linksClickable="true"
android:autoLink="web"
Ответ 6
Я почему-то не могу ответить на ваш ответ; Я просто хотел сказать, что вы можете опустить textView.setText
и просто поместить его в строковый ресурс и установить это с помощью android:text
. Вам просто нужно сохранить textView.setMovementMethod(LinkMovementMethod.getInstance());
; к сожалению android:linksClickable="true"
сам по себе не работает.
Ответ 7
Решение: Linkify.addLinks(chatText, Linkify.ALL);
Ответ 8
Это работает довольно корректно: (В свойствах textview, внутри xml файла)
android:autolink="web"
Ответ 9
Чтобы динамически добавлять ссылки (выбираемые с сервера), это работает:
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>
Это добавит "Динамическое соединение" к вашему текстовому виду, и если вы коснетесь этого, он перейдет по ссылке, предоставленной вашим сервером.