Как сделать ссылку в android studio

Обновлено: 19.09.2024

здесь @string/txtCredits является строковым ресурсом, который содержит <a href="some site">Link text</a> .

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

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

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

похороненный в демонстрациях API, я нашел решение своей проблемы:

Я удалил большинство атрибутов в моем TextView, чтобы соответствовать тому, что было в демо.

важно: не забудьте удалить autoLink="web" Если вы звоните setMovementMethod() .

Я использую только android:autoLink="web" и он отлично работает. Щелчок по ссылке открывает браузер и показывает правильную страницу.

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

проведя некоторое время с этим, я обнаружил, что:

  • android:autoLink="web" работает, если у вас есть полные ссылки в вашем HTML. Ниже будут выделены синим цветом и доступны клики:
  • view.setMovementMethod(LinkMovementMethod.getInstance()); будет работать со следующим (будет выделено и кликабельно):
  • некоторые текст <a href="http://www.google.com">http://www.google.com</a>
  • текст http://www.google.com
  • текст <a href="http://www.google.com">Go to Google</a>

обратите внимание, что третий вариант имеет гиперссылку, но описание ссылки (части между тегами) само по себе не является ссылкой. android:autoLink="web" тут не работы с такими ссылками.

  • android:autoLink="web" Если установлено в XML, переопределит view.setMovementMethod(LinkMovementMethod.getInstance()); (т. е. ссылки третьего рода будут выделены, но не кликабельный.)

мораль этой истории-использование view.setMovementMethod(LinkMovementMethod.getInstance()); в вашем коде и убедитесь, что у вас нет android:autoLink="web" в вашем XML-макете, если вы хотите все ссылки должны быть кликабельны.

вышеуказанные решения не работали для меня, но следующее (И это кажется немного чище).
Во-первых, в строковом ресурсе определите свой тег, открывающий шевроны, используя кодировку сущности HTML, т. е.:

затем (как было предложено здесь) установите этот параметр на свой Виджет TextView:

наконец, в коде сделать:

вот и все, никаких регулярных выражений или других ручных хаков не требуется.

Если вы хотите добавить HTML-ссылку, Все, что вам нужно сделать, это:

добавить HTML-строку ресурса:

добавьте свой вид в макет без какой-либо конкретной конфигурации ссылки на всех:

добавьте соответствующий MovementMethod программно в свой TextView:

вот именно! И да, имея такие опции, как" autoLink "и" linksClickable", работающие только явные ссылки (не завернутые в html-теги) тоже вводят меня в заблуждение.

я использовал это просто

делает ссылки кликабельными, учитывая здесь

я добавил эту строку с TextView : android:autoLink="web"
Ниже приведен пример использования в файле макета.

Я надеюсь, что это поможет вам;

только что вам нужно добавить это в текстовом представлении в xml

Ричард, в следующий раз, вы должны добавить этот код под TextView в XML макета вместо этого.

это должно быть так.

вам не нужно использовать этот код ( t2.setMovementMethod(LinkMovementMethod.getInstance()); ) для того, чтобы сделать кликабельную ссылку.

кроме того, вот правда: пока вы выберите автоссылка и linksClickable, не забудьте добавить это строку.в XML файл, так что кликабельная ссылка будет работа.

С помощью linkify: Linkify возьмите кусок текста и регулярное выражение и превращает все регулярные выражения в тексте в интерактивные ссылки

самое простое, что сработало для меня, - это использовать Linkify

и он автоматически обнаружит веб-адреса из текста в textview.

Я заметил, что с помощью

работал нормально для URL-адресов, но так как у меня был адрес электронной почты и номер телефона, который я хотел связать, я в конечном итоге использовал эту строку android:autoLink="all" такой

и это сработало как заклинание.

вот очень одна строка android код, чтобы сделать телефон и url выбирается из textView независимо от того, что строка и что данные. Для этого вам не нужно использовать HTML-теги.

обязательно не использовать setAutoLinkMask(Linkify.ALL) при использовании setMovementMethod(LinkMovementMethod.getInstance()) и Html.fromHTML() на правильно отформатированную HTML ссылки (например, <a href="http://www.google.com/">Google</a> ).

следующее должно работать для тех, кто ищет комбинацию текста и гиперссылки в приложении для Android.

теперь вы можете использовать это string в любой момент View такой:

теперь, в вашей деятельности или фрагменте, сделайте следующее:

к настоящему времени вам не требуется устанавливать android:autoLink="web" или android:linksClickable="true" используя этот подход.

Я надеюсь, вы найдете это полезным.

и добавьте разрешение в файл манифеста

вам нужно только это:

вставьте эту строку в TextView, которую можно щелкнуть со ссылкой на веб-сайт. URL-адрес, заданный как текст этого TextView.

единственное полное решение для всего, что я нашел, это следующее:

и TextView не должен иметь android:autolink . Нет необходимости android:linksClickable="true" , и это правда по умолчанию.

Компонент TextView предназначен для отображения текста без возможности редактирования его пользователем, что видно из его названия (Text - текст, view - просмотр).

Находится в разделе Texts.

Для отображения текста в TextView в файле разметки используется атрибут android:text, например:

Такой подход является нежелательным. Рекомендуется всегда использовать текстовые ресурсы. В будущем эта привычка позволит вам обеспечить многоязыковую поддержку:

Программная установка текста

Программно текст можно задать методом setText():

Атрибуты

Для всех вышеперечисленных атрибутов в классе TextView есть соответствующие методы для чтения или задания соответствующих свойств.

Программно установим размеры текста при помощи setTextSize() с различными единицами измерения.

TextView

По умолчанию у компонентов TextView отсутствует фоновый цвет. Чтобы задать цвет, укажите значение Drawable для атрибута android:background. В качестве значения Drawable может использоваться изображение или XML-представление фигуры, включающий ресурс Drawable (поместить в папку res/drawable).

Программная установка фона

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

Предположим, у вас определён в ресурсах зелёный цвет:

Следующий код будет ошибочным:

Нужно так (два варианта):

Реагируем на событие onClick

Если вы хотите, чтобы TextView обрабатывал нажатия (атрибут android:onClick), то не забывайте также использовать в связке атрибут android:clickable="true". Иначе работать не будет!

Многострочный текст

Если вы хотите создать многострочный текст в TextView, то используйте символы \n для переноса строк.

Например, в ресурсах:

Обратите внимание, что в тексте также применяется простое форматирование.

Также перенос на новую строку можно задать в коде:

Увеличиваем интервалы между строками

Вы можете управлять интервалом между соседними строчками текста через атрибут android:lineSpacingMultiplier, который является множителем. Установите дробное значение меньше единицы, чтобы сократить интервал или больше единицы, чтобы увеличить интервал между строками.

Бой с тенью

Чтобы оживить текст, можно дополнительно задействовать атрибуты для создания эффектов тени: shadowColor, shadowDx, shadowDy и shadowRadius. С их помощью вы можете установить цвет тени и ее смещение. Во время установки значений вы не увидите изменений, необходимо запустить пример в эмуляторе или на устройстве. В следующем примере я создал тень красного цвета со смещением в 2 пикселя по вертикали и горизонтали. Учтите, что для смещения используются единицы px (пиксели), единицы dp не поддерживаются.

TextView с тенью

Программный эквивалент - метод public void setShadowLayer (float radius, float dx, float dy, int color):

Создание ссылок автоматом

У TextView есть ещё два интересных свойства Auto link (атрибут autoLink) и Links clickable (атрибут linksClickable), которые позволяют автоматически создавать ссылки из текста.

При этом уже на этапе разработки вы увидите, что строка адреса сайта после слов Мой адрес: стала ссылкой. Если вы запустите приложение и нажмете на ссылку, то откроется браузер с указанным адресом. Вам даже не придется писать дополнительный код. Аналогично, если указать номер телефона (параметр phone), то запустится звонилка.

Атрибут autoLink позволяет комбинировать различные виды ссылок для автоматического распознавания: веб-адрес, email, номер телефона.

Ссылка в TextView

Цвет ссылки можно поменять через свойство Text color link (XML-атрибут textColorLink), а программно через метод setTextLinkColor().

Программно можно установить ссылки на текст через класс Linkify:

Ссылка в TextView

Кроме константы ALL, можно также использовать Linkify.EMAIL_ADDRESSES, Linkify.MAP_ADDRESSES, Linkify.PHONE_NUMBERS. К сожалению, русские адреса не распознаются. В моём случае индекс был распознан как телефонный номер, а город и улица не стали ссылкой.

В таких случаях придётся самостоятельно добавить ссылки в текстах. Например, определим ссылку в ресурсе:

Ссылки в тексте выглядят не совсем удобными. Есть отдельная библиотека, которая улучшает функциональность. Описание проблем и ссылка на библиотеку есть в статье A better way to handle links in TextView - Saket Narayan.

Совет: Используйте полупрозрачность с умом

Если вам нужно установить текст полупрозрачным, то не используйте атрибут android:alpha:

Дело в том, что такой подход затрачивает много ресурсов при перерисовке.

Атрибут textColor позволяет установить полупрозрачность без потери производительности:

Выделить текст для копирования

По умолчанию, текст в TextView нельзя выделить для копирования. Но в API 11 появилась такая возможность, которая может пригодиться. Делается либо при помощи XML-атрибута android:textIsSelectable, либо через метод setTextIsSelectable().

Добавьте в разметку два компонента TextView и одно текстовое поле EditText для вставки скопированного текста. У первой текстовой метки установим возможность выделения текста декларативно.

Для второго компонента возможность выделения создадим программно.

Сделайте долгий тап на тексте в любом TextView. Увидите стандартные ползунки для выбора длины текста. Скопируйте текст, сделайте длинный тап в EditText и вставьте текст.

Если элемент script имеет атрибут src , содержимое должно игнорироваться, любое другое поведение является несоответствующим.

предлагаемый в блогах (как взломать) для размещения контента в элементе, зная, что он не будет оцениваться, затем используйте методы DOM, чтобы получить содержимое в виде строки, и либо eval , либо вставить его в новый элемент сценария. Ни одна из них не является хорошей идеей.

Погруженный в демонстрации API, я нашел решение своей проблемы:

Я удалил большинство атрибутов в моем TextView, чтобы соответствовать тому, что было в демо.

Важно: Не забудьте удалить autoLink="web" , если вы вызываете setMovementMethod() .

Может быть, это только я, но зачем вам это делать с помощью EditText? – Justin 8 May 2012 в 19:41 Можно ли захватить клик и обработать его самостоятельно? Например. загрузить фрагмент. – qix 9 November 2013 в 15:22 Так же, как commment, я видел некоторые Samsung Galaxy S3 с ОС 4.3, которые сбой, когда "setMovementMethod (LinkMovementMethod.getInstance ()) & quot; , поэтому просто учтите это, мне пришлось создать проверку, прежде чем добавлять ее – Jorge Aguilar 25 March 2014 в 20:24 Тоже самое. Обратите внимание, что если вызывается setMovementMethod (), необходимо удалить autolink = "web" в файле XML, иначе ссылка не будет работать. Спасибо за комментарий – voghDev 5 May 2014 в 11:04 Просто используйте «autoLink». атрибут в вашем xml, например: android: autoLink = & quot; web & quot; – Kalpesh 22 May 2015 в 05:48

Я добавил эту строку в TextView : android:autoLink="web" Ниже приведен пример использования в файле макета.

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

Мой код Java был примерно таким:

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

Добавить CDATA в свой ресурс строки

Я заметил, что использование android:autoLink="web" , таким образом

, работало нормально для URL-адресов, но поскольку у меня был адрес электронной почты и номер телефона, который я хотел бы также связать, я в конечном итоге использовал это line android:autoLink="all" , подобный этому

, и он работал как шарм.

Вам нужно только это:

Вставьте эту строку в TextView, которую можно кликать по ссылке в Интернете. URL-адрес, заданный как текст этого TextView.

Надеюсь, это вам поможет,

Это отлично работает. Также убедитесь, что вы удалите android:autoLink=? из своего TextView . – sulai 17 October 2013 в 14:44 Это то, что окончательно сработало для меня. Valid HTML и не использовать android:autoLink=? важно! – Thorinside 23 October 2013 в 23:55 Для Xamarin это слово отображается, но не подчеркнуто и не может быть нажато с использованием вышеуказанных и НЕ этих параметров: autoLink, linksClickable – maxweber 1 November 2013 в 17:35 Для настройки Xamarin и установки текста или установки TextFormatted также выводится слово, но оно не зависит от клика, а не от синего / подчеркнутого. Удаление автозагрузки также не выполняется. Также исключается удаление только ссылокClickable. Удаление обоих также не выполняется. – maxweber 1 November 2013 в 17:37 helloWorld.TextFormatted = Html.FromHtml (linkURL); с и без них также терпит неудачу. (не связанный, а не синий) нельзя щелкнуть) – maxweber 1 November 2013 в 17:49

[Tested in Pre-lollipop as well as in Lollipop and above]

Вы можете получить строку HTML из бэкэнд или из ваших файлов ресурсов. Если вы поместите свой текст в качестве строки ресурса, обязательно добавьте тег CDATA :

Затем в коде вам нужно получить строку и назначить ее как HTML и установить метод перемещения ссылок :

Только то, что вам нужно добавить в текстовое представление в xml

Вышеупомянутые решения не сработали для меня, но следующее (и кажется немного чище). Во-первых, в строковом ресурсе определите свой шедевр открытия тегов с использованием кодирования сущности HTML, то есть:

Затем (как предложено здесь ) установите эту опцию в TextView:

Наконец, в code, do:

Вот и все, никаких регулярных выражений или других ручных хаков.

Это создаст HTML-парсер каждый раз, когда этот код будет выполнен. Имейте это в виду, если вы используете это для создания ссылок внутри элемента списка или в других важных для производительности местах вашего приложения. Во время создания списка это увеличивает время выполнения моих методов getView с 50% – Janusz 12 April 2012 в 16:04 Также обратите внимание, что пробелы в URL-адресе должны быть заменены на %20 – Nicolas Tyler 26 June 2014 в 14:19 Вы можете избежать проблем с кодировкой объектов, обернув свою строку в тег <![CDATA[ . ]]> . – Paul Lammertsma 15 September 2014 в 14:37 РАБОТАЕТ для меня, спасибо. Не работает с тегом <![CDATA[. ]]> . – ricky.tribbia 19 October 2015 в 09:12

с помощью linkify : Linkify возьмите кусок текста и регулярное выражение и превратите все совпадения регулярных выражений в тексте в интерактивные ссылки

Do not забудьте

Не знаю, стоит ли добавить еще один ответ, но на всякий случай .

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

myactivty.java (in onCreate ()):

Это создаст две интерактивные гиперссылки с текстом link text1 и link text2 , которые перенаправляют пользователя на google.

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

Теперь вы можете использовать это string в любом данном View , как это:

Теперь, в вашей деятельности или фрагменте, сделайте следующее:

К настоящему времени вы не 't требуется установить android:autoLink="web" или android:linksClickable="true" с помощью этого подхода.

Надеюсь, вы найдете это полезным.

Вот как я решил использовать интерактивные и видимые ссылки в TextView (по коду)

но я бы хотел увидеть текст и при нажатии на текст он перенаправляется на ссылку (открытую браузером)? Это решение не решает это, не так ли? – Silentbang 12 December 2012 в 15:06

Я использовал это просто

делает ссылки кликабельными, заданные здесь

Этот ответ лучший. Работает на каждой версии Android, и нам просто нужно добавить этот метод, когда текст установлен в TextView. Бонус: он позволяет добавлять настраиваемые ссылки, доступные для клика – Kerwan 5 December 2014 в 17:56 Действительно самый простой и лучший ответ. он работает для электронной почты / Интернета в то же время . спасибо человеку . – Imran Ahmed 5 June 2015 в 08:42 Используйте LinkifyCompat, если вам нужны некоторые из новых расширенных функций – Vaiden 7 January 2018 в 00:10 Хорошо, он делает URL-адреса без <a href. кликабельными – Pavel 28 May 2018 в 14:59 Он также делает все "html" теги внутри работают соответственно, например. & Л; б & GT; . & л; / б & GT; и т.п. – Array 10 August 2018 в 12:52

Ричард, в следующий раз вы должны добавить этот код в TextView вместо XML.

Это должно быть так.

t нужно использовать этот код ( t2.setMovementMethod(LinkMovementMethod.getInstance()); ), чтобы сделать ссылку доступной.

Также, это правда: до тех пор, пока вы установите autoLink и linksClickable , не забудьте добавить это в файл String.xml, чтобы ссылка на клики работала.

Включено ли ваше устройство или интернет-эмулятор и установлено ли оно ON (Wi-Fi) или подключено к локальной сети, @ Violet Giraffe? – David Dimalanta 14 November 2013 в 08:50 Это. Мне никогда не удавалось сделать ссылки кликабельными, используя только атрибуты XML, для этого пришлось прибегнуть к Java-коду. Это неважно, но не приятно. – Violet Giraffe 14 November 2013 в 11:38

Я использую только android:autoLink="web" , и он работает нормально. Щелчок по ссылке открывает браузер и показывает правильную страницу.

Единственное, что я мог догадаться, это то, что какое-то другое представление находится над ссылкой. Что-то прозрачное заполняет весь родитель, но не отображает ничего выше ссылки. В этом случае клик переходит к этому представлению вместо ссылки.

Добавлено больше информации выше. Может ли это быть способ, которым я определяю строку как & lt; string name = & quot; txtCredits & quot; & gt; & lt; a href http://www.google.com">Google</a></string>" rel="nofollow noreferrer"> google.com" & gt; Google & lt; / a & lt; / string & gt; / / g0 ] ;? Похоже, это разрешено, но это не работает для меня. – Richard 29 April 2010 в 23:46 использование autolink отлично подходит для меня, просто текстовое представление без родителя вообще. – euther 5 December 2011 в 02:52 android: autoLink также отлично подходит для связывания телефонных номеров, адресов и адресов электронной почты (или всего выше). – CloudyMusic 23 March 2012 в 22:38 Нет, это не так, потому что этот ответ не работает, если вы не используете тег привязки с текстовым текстом, отличным от URL-адреса – cprcrack 25 January 2014 в 20:38

Причина, по которой у вас возникла проблема, заключается в том, что она только пытается сопоставить «голые» адреса. http://www.google.com/ http://www.google.com ".

Запуск текста через Html.fromHtml () должен сделать трюк. Вы должны сделать это программно, но он работает.

Ссылки в TextView отличаются от другого текста в строке, поэтому я считаю, что они распознаются как ссылки. Они просто не доступны для просмотра :-( – Richard 30 April 2010 в 18:49

Потратив некоторое время на это, я обнаружил, что:

  • android:autoLink="web" работает, если у вас есть полные ссылки в вашем HTML. Следующее будет выделено синим и кликабельным:
  • Некоторые тексты <a href="http://www.google.com">http://www.google.com</a>
  • Некоторые тексты http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); будет работать со следующим (будет выделен и доступен кликабель):
  • Некоторые тексты <a href="http://www.google.com">http://www.google.com</a>
  • Некоторые тексты http://www.google.com
  • Некоторые тексты <a href="http://www.google.com">Go to Google</a>

Обратите внимание, что третий вариант имеет гиперссылку, но описание ссылки (сама часть между тегами) не является ссылкой. android:autoLink="web" НЕ работает с такими ссылками.

Это третья часть технического руководства по прямым ссылкам в Android. В предыдущих публикациях мы рассмотрели схемы URI и намерения в Chrome а следующая публикация будет посвящена Google Play Referrer.

Прямые ссылки с помощью ссылок приложений Android

  • Открыть приложение с намерением, если оно установлено.
  • Вернуться к веб-ссылке, если приложение не установлено.

Android app links deep linking

Через несколько месяцев, когда Android 6.0 получит более широкое распространение, можно будет начать отказываться от стандартных механизмов с URI и намерениями Chrome. А пока необходимо поддерживать эти механизмы вместе с другими, чтобы гарантировать работу во всех случаях, поскольку экосистема Android неоднородна.

Требования для использования ссылок приложений Android

  • Должен быть действующий веб-сайт.
  • Устройство пользователя должно работать под управлением Android 6.0 или более поздних версий.

Настройка ссылок приложений Android

Настроить службу на использование ссылок приложений можно в два этапа.

  1. Настройте манифест для получения намерений.
  2. Зарегистрируйте веб-сайт в качестве ссылки приложения.

Шаг 1. Добавьте фильтры намерений в манифест

Это несложно. Грубо говоря, нужно сообщить системе Android, что по ссылке, ведущей на веб-сайт (-ы), нужно открывать приложение, а не веб-сайт.

Шаг 2. Настройте веб-сайт для поддержки ссылок приложений

Необходимо создать файл assetlinks.json следующего формата.

Примечание. Нам удалось добиться работоспособности ссылок приложений без изменения значения android_app по умолчанию.

Отпечаток SHA256 сертификата подписи вашего приложения. Для создания отпечатка потребуется использовать программу keytool. В командной строке перейдите в домашний каталог java, оттуда перейдите в папку bin. Выполните следующую команду.

$ keytool -list -v -keystore my-release-key.keystore

(Сведения о том, как найти программу keytool, см. в этом примере для Mac или Windows .)

Наконец, файл assetlinks.json должен быть размещен в каталоге /.well-known/assetlinks.json. Этот каталог мы создаем для всех интегрированных приложений Branch с помощью наших серверов узлов и экспресс-ссылок. Вот код, который мы использовали.

Обработка прямых ссылок в приложении

Чтобы обработать прямую ссылку в приложении, нужно просто получить строку данных намерения в действии, открытом при щелчке. Это можно сделать так.

После этого потребуется использовать разбор строк, чтобы прочесть полную строку ссылки приложения, запустившей открытие приложения.

Использование прямых ссылок на практике

На практике такой механизм был бы самым удобным, если бы все использовали Android версии 6.0 или более поздней, а у вас был бы действующий веб-сайт. Но такая ситуация не сложится еще несколько лет, поэтому нужно обрабатывать и другие сценарии.

Пока мы рекомендуем включить на веб-сайте поддержку ссылок приложений, но использовать существующие механизмы поддержки прямых ссылок на основе схемы URI и намерений в Chrome до тех пор, пока ссылки приложений не получат более широкого распространения. Например, если пользователь открывает ваш сайт, а на устройстве установлено приложение, нужно, чтобы срабатывало намерение Chrome или схема URI при нажатии кнопки запуска приложения на мобильном сайте. Ссылки приложений, по-видимому, не обрабатывают этого сценария.

Если у вас нет веб-сайта, но нужно использовать ссылки приложений, рекомендуем встроить представления Branch Deepviews в общую стратегию развития продукта. Это мобильные предварительные представления содержимого вашего приложения, они автоматически формируются нашей системой и размещаются в ней. Представления Deepview — удобная возможность просмотра содержимого пользователями, у которых не установлено вашего приложения. Это решение дополняет ссылки приложений Android.

Следите за дальнейшими публикациями, посвященными прямым ссылкам в Android.

Читайте также: