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

TextView

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

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

TextView — один из самых используемых компонентов. С его помощью пользователю удобнее ориентироваться в программе. По сути, это как таблички: Руками не трогать, По газону не ходить, Вход с собаками воспрещен, Часы работы с 9.00 до 18.00 и т.д., и служит для представления пользователю описательного текста.

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

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

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

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

Атрибуты

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

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

По умолчанию у компонентов 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 не поддерживаются.

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

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

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

Выглядит это следующим образом. Предположим, мы присвоим элементу TextView текст Мой сайт: developer.alexanderklimov.ru и применим к нему указанные свойства.

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

Читайте также:  Взлом с помощью андроида

У ссылки есть интересная особенность — при длительном нажатии на ссылку появляется диалоговое окно, позволяющее скопировать ссылку в буфер обмена.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Четыре способа добавить ссылку в разметку

Очень часто в разных местах мобильного приложения возникает необходимость сослаться на какой-нибудь внешний ресурс. Например, другие мои приложения или просто поисковик.Таким образом, нам нужно в интерфейсе показать уже знакомый многим пользователям элемент — интернет ссылку .

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

Способов реализации данной задачи может быть множество. В итоге, нам нужно разместить на экране простой текстовый элемент, который будет похож на обычную ссылку и будет реагировать на касания. Описать этот элемент можно статически в файле разметки (layout), а можно и добавить динамически, по мере надобности.

В данном уроке будет описан первый способ с четырьмя реализациями.

Создадим новый проект. В мастере выберем Blank Activity

Назовем его LinkTest.

Вот код разметки activity_main.xml :

Это схемка для уточнения:

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

Пока это не то, что в заголовке статьи, потому как мы изменим вид разметки в коде.

Вот весь код MainActivity:

Теперь расскажу про каждую ссылку по порядку.

У первого элемента TextView с id равным tv_link1 установлено свойство android:clickable=»true» , т.е. он будет реагировать на касания. А при касании вызовет метод blogView, т.к. задано свойство android:onClick=»blogView».

Читайте также:  Ggj формат как открыть андроид

В методе blogView мы создадим намерение (intent) и запустим новую активность с этим намерением (startActivity(openlink)).

ОС Android сама поймет по намерению, что нужно запустить, т.е. браузер.

Узнаваемым мы его сделаем при помощи SpannableString, текст можно сделать жирным, подчеркнутым и т.д., более подробно почитайте об интерфейсе Spannable.

Второй элемент TextView с id равным tv_link2 мы задаем при помощи HTML, потом получаем из функции Html.fromHtml(linkedText) объект Spanned и его устанавливаем в TextView . Позже задаем ему MovementMethod (tv_test2.setMovementMethod(LinkMovementMethod.getInstance())), с помощью этого интерфейса можно реализовать много интересных вещей. При работе с простым TextView, мы используем класс LinkMovementMethod, как гласит документация, он поддерживает клики по ссылкам.

Третий элемент TextView с id равным tv_link3 создает ссылку просто:

Всю работу взял на себя метод класса Linkify.addLinks ,по сути он проделывает всю предыдущую работу по установке LinkMovementMethod, но перед этим проверяет текст на соответствие шаблонам ссылок.

Четвертый элемент TextView с id равным tv_link3, вообще не используется в MainActivity , т.к. тут всю работу за нас сделала разметка, а точнее свойство android:autoLink=»web». Текст из элемента автоматически передается как адрес для браузера. Это свойство разметки может быть использовано и для других целей, например звонков, отправки e-mail, показа карты с координатами и т.п. Свойства элемента говорят сами за себя:

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

Источник

Как сделать ссылки в TextView кликабельными?

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

здесь @string/txtCredits является строковым ресурсом, который содержит Link text .

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

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

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

30 ответов

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

Я удалил большинство атрибутов в моем 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-макете, если вы хотите все ссылки должны быть кликабельны.

Читайте также:  Как использовать кэш для андроида

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

В общем, Закодируйте все шевроны в строке таким образом. Кстати, ссылка должна начинаться с http://

затем (как было предложено здесь) установите этот параметр на свой Виджет 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 ссылки (например, Google ).

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

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

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

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

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

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

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

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

принятый ответ правильный, но это будет означать, что телефонные номера, карты, адреса электронной почты и регулярные ссылки например http://google.com без тегов href больше не будет кликабельна, так как вы не можете иметь автолинк в xml.

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

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

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

Источник

Оцените статью