У меня есть следующее определение 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.
android:focusable="true"
решил мою проблемуОтветы:
Похороненный в демоверсиях API, я нашел решение моей проблемы:
Link.java:
Я удалил большинство атрибутов в моем TextView, чтобы соответствовать тому, что было в демонстрации.
Это решило это. Довольно сложно обнаружить и исправить.
Важно : не забудьте удалить,
autoLink="web"
если вы звонитеsetMovementMethod()
.источник
Я пользуюсь только
android:autoLink="web"
и работает нормально. Щелчок по ссылке открывает браузер и показывает правильную страницу.Я могу догадаться, что над ссылкой находится другое представление. Нечто прозрачное заполняет весь родительский элемент, но ничего не отображает над ссылкой. В этом случае щелчок переходит к этому представлению вместо ссылки.
источник
Проведя некоторое время с этим, я обнаружил, что:
android:autoLink="web"
работает, если у вас есть полные ссылки в вашем HTML. Следующее будет выделено синим цветом и кликабельно:view.setMovementMethod(LinkMovementMethod.getInstance());
будет работать со следующим (будет выделено и кликабельно):Обратите внимание, что третий вариант имеет гиперссылку, но описание самой ссылки (части между тегами) не является ссылкой.
android:autoLink="web"
это НЕ работает с такими ссылками.android:autoLink="web"
если установлено в XML, то будет переопределеноview.setMovementMethod(LinkMovementMethod.getInstance());
(то есть ссылки третьего вида будут выделены, но не кликабельны).Мораль этой истории заключается в использовании
view.setMovementMethod(LinkMovementMethod.getInstance());
в вашем коде и убедитесь, что у вас нетandroid:autoLink="web"
в макете XML, если вы хотите, чтобы все ссылки были кликабельными.источник
<a href="http://www.google.com">Go to Google</a>
не будет работать для автоссылки. Для стольких ответов на SO, это единственный, который упомянул об этом. Спасибо!Вышеуказанные решения не сработали для меня, но следующее сработало (и, кажется, немного чище).
Во-первых, в строковом ресурсе определите шевроны открытия тегов, используя кодировку сущности HTML, т.е.
и не:
В общем, закодируйте все шевроны в строке таким образом. Кстати, ссылка должна начинаться с
http://
Затем (как предлагается здесь ) установите эту опцию в TextView:
Наконец, в коде выполните:
Вот и все, никаких регулярных выражений или других ручных взломов не требуется.
источник
%20
<![CDATA[ ... ]]>
тег.<![CDATA[...]]>
тегом.я использовал это просто
делает ссылки кликабельными, приведенными здесь
источник
<a href...
кликабельностиЕсли вы хотите добавить HTML-подобную ссылку, все, что вам нужно сделать, это:
добавить HTML-подобную строку ресурса:
добавьте ваш вид в макет без НИКАКОЙ специфичной для ссылки конфигурации:
Добавьте соответствующий MovementMethod программно к вашему TextView:
Это оно! И да, наличие таких опций, как "autoLink" и "linksClickable", работающих только с явными ссылками (не заключенными в html-теги), также вводит меня в заблуждение ...
источник
Я добавил эту строку в
TextView
:android:autoLink="web"
Ниже приведен пример использования в файле макета.
layout.xml
образецstring.xml
источник
Следующее должно работать для всех, кто ищет комбинацию текста и гиперссылки в приложении Android.
В
string.xml
:Теперь вы можете использовать это
string
в любом заданномView
виде:Теперь, в вашей Деятельности или Фрагменте, сделайте следующее:
К настоящему времени вам не нужно устанавливать
android:autoLink="web"
илиandroid:linksClickable="true"
использовать этот подход.Я надеюсь, что вы найдете это полезным.
источник
Я надеюсь, что это поможет вам;
источник
android:autoLink=?
из своегоTextView
.android:autoLink=?
важно!Только то, что вам нужно, чтобы добавить это в текстовом представлении в XML
источник
Самое простое, что сработало для меня, это использовать Linkify.
и он автоматически обнаружит веб-ссылки из текста в текстовом представлении.
источник
Ричард, в следующий раз тебе следует добавить этот код в TextView вместо XML макета.
Это должно быть так.
Вам не нужно использовать этот код (
t2.setMovementMethod(LinkMovementMethod.getInstance());
), чтобы сделать ссылку кликабельной.Кроме того, вот истина: пока вы устанавливаете autoLink и linksClickable , не забудьте добавить это в файл String.xml, чтобы работала кликабельная ссылка.
источник
с помощью linkify : Linkify берет фрагмент текста и регулярное выражение и превращает все совпадения регулярных выражений в тексте в интерактивные ссылки
Не забудь
источник
Вот очень строковый код Android для выбора телефона и URL-адреса из textView независимо от того, что это за строка и что такое данные. Вам не нужно использовать какие-либо теги HTML для этого.
источник
Я заметил, что используя
android:autoLink="web"
таким образомработал нормально для URL-адресов, но так как у меня был адрес электронной почты и номер телефона, на который я также хотел связать ссылку, я использовал эту строку,
android:autoLink="all"
как этаи это сработало как шарм.
источник
Управление Linkify Text Color Также
источник
Обязательно не используйте
setAutoLinkMask(Linkify.ALL)
при использованииsetMovementMethod(LinkMovementMethod.getInstance())
иHtml.fromHTML()
на правильно отформатированныхHTML
ссылках (например,<a href="http://www.google.com/">Google</a>
).источник
Использовать этот...
и добавить разрешение в файле манифеста
источник
Вам нужно только это:
Вставьте эту строку в TextView, на которую можно кликнуть со ссылкой на Интернет. URL-адрес устанавливается как текст этого TextView.
Пример:
источник
Принятый ответ правильный, НО это будет означать, что номера телефонов, карты, адреса электронной почты и обычные ссылки, например
http://google.com
без тегов href, НЕ ДОЛЖНЫ быть кликабельными, так как у вас не может быть автоссылки в xml.Единственное законченное решение, чтобы все, что я нашел, было доступно:
И TextView не должно иметь
android:autolink
. Там нет необходимостиandroid:linksClickable="true"
либо; это правда по умолчанию.источник
myapp://
схем (для Deep Linking).Так я решил кликабельные и видимые ссылки в TextView (по коду)
источник
Используйте код ниже:
источник
[Tested in Pre-lollipop as well as in Lollipop and above]
Вы можете получить свою HTML-строку из бэкэнда или из файлов ресурсов. Если вы поместите свой текст в виде строки ресурса, обязательно добавьте
CDATA
тег:Затем в коде нужно получить строку, назначить ее в виде HTML и установить метод перемещения ссылки:
источник
Причина, по которой у вас возникла проблема, заключается в том, что она пытается сопоставить только «голые» адреса. такие вещи, как "www.google.com" или " http://www.google.com ".
Выполнение вашего текста через Html.fromHtml () должно помочь. Вы должны сделать это программно, но это работает.
источник
Не знаю, стоит ли добавлять еще один ответ, но на всякий случай ...
Мне пришлось выследить это в нескольких местах, но, наконец, эта версия кода заработала.
strings.xml:
myactivity.xml:
myactivty.java (в onCreate ()):
Это создаст два интерактивных гиперссылок с текстом
link text1
иlink text2
который перенаправляет пользователя на Google.источник
Автолинк у меня не работает. Следующее работает как шарм,
источник
Если вы используете TextView на основе XML, вам нужно сделать всего две вещи:
Укажите вашу ссылку в строке, например, «это моя веб-страница». Вы можете добавить его в XML или в коде.
В XML, который имеет TextView, добавьте эти:
источник
Добавьте CDATA к вашему строковому ресурсу
strings.xml
источник
Я использую автолинк для «автоматического подчеркивания» текста, но просто создал «onClick», который управляет им. (Я столкнулся с этой проблемой сам)
Не требует никаких разрешений, поскольку вы передаете намерение приложениям, которые управляют этими ресурсами (браузер IE).
Это было то, что работало для меня. Удачи.
источник
Просто потратил так много времени, чтобы понять, что вы должны использовать getText (R.string.whhaps) вместо getString (R.string.whhaps) ...
В любом случае, вот как я начал работать. С несколькими гиперссылками в том же текстовом представлении тоже.
пример строки
источник