- TextView
- Программная установка текста
- Атрибуты
- Программная установка фона
- Реагируем на событие onClick
- Многострочный текст
- Увеличиваем интервалы между строками
- Бой с тенью
- Создание ссылок автоматом
- Совет: Используйте полупрозрачность с умом
- Выделить текст для копирования
- как сделать кликабельный текст в Android?
- 11 ответов
- Четыре способа добавить ссылку в разметку
- Как сделать ссылки в TextView кликабельными?
- 30 ответов:
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?
возможно ли в android сделать текстовый вид кликабельным, если да, то как ??а если нет, то каким будет способ сделать ярлык кликабельным??я хочу реализовать действие вызова, используя this
спасибо за ответы ur заранее.
11 ответов
вы пробовали это?
проще непосредственно в XML : с помощью clickable = true
мы также можем получить событие click на TextView же Button & ImageView .
и метод также одинаковый для всех видов.
сначала в вашем java-файле приведите свой TextView по xml id
честно говоря, я нашел плоскую кнопку, чтобы работать лучше для того, что я делал с RecyclerView:
затем настройка кнопки в соответствии с моим макетом и, наконец, добавление следующего к моей MainActivity.java под onCreate :
вы можете установить прослушиватель onclick на кнопку texview like.кнопка infact наследует свойства из textview.
в xml для этого TextView включите поле
тогда в вашем java-файле, связанном с этим xml, включите эту функцию
правда это было давно, когда вы задали свой вопрос. Но я думаю, что правильная вещь для достижения того, что вы хотели, — это установить атрибут TextView xml android:autoLink. Например:
просто попробуйте это:-
Выполнить Вид.OnClickListener, затем просто примените случай переключателя и определите идентификатор вашего текстового представления в случае и передайте намерение.
/ / здесь textView является id для textView, который я выбрал.
TextView также является производным от представления, такого как-EditText,ListView и т. д.,поэтому мы можем использовать
Источник
Четыре способа добавить ссылку в разметку
Очень часто в разных местах мобильного приложения возникает необходимость сослаться на какой-нибудь внешний ресурс. Например, другие мои приложения или просто поисковик.Таким образом, нам нужно в интерфейсе показать уже знакомый многим пользователям элемент — интернет ссылку .
В связи с последними обновлениями, буду стараться выкладывать уроки, созданные при помощи Android Studio.
Способов реализации данной задачи может быть множество. В итоге, нам нужно разместить на экране простой текстовый элемент, который будет похож на обычную ссылку и будет реагировать на касания. Описать этот элемент можно статически в файле разметки (layout), а можно и добавить динамически, по мере надобности.
В данном уроке будет описан первый способ с четырьмя реализациями.
Создадим новый проект. В мастере выберем Blank Activity
Назовем его LinkTest.
Вот код разметки activity_main.xml :
Это схемка для уточнения:
Android Studio нам сразу же показывает итоговый экран. т.е. как будет выглядеть на устройстве.
Пока это не то, что в заголовке статьи, потому как мы изменим вид разметки в коде.
Вот весь код MainActivity:
Теперь расскажу про каждую ссылку по порядку.
У первого элемента TextView с id равным tv_link1 установлено свойство android:clickable=»true» , т.е. он будет реагировать на касания. А при касании вызовет метод blogView, т.к. задано свойство android:onClick=»blogView».
В методе 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-теги) очень вводят меня в заблуждение.
делает ссылки кликабельными, учитывая здесь
Источник