- TextView
- Программная установка текста
- Атрибуты
- Программная установка фона
- Реагируем на событие onClick
- Многострочный текст
- Увеличиваем интервалы между строками
- Бой с тенью
- Создание ссылок автоматом
- Совет: Используйте полупрозрачность с умом
- Выделить текст для копирования
- Как изменить межбуквенный интервал в Textview?
- 7 ответов
- Как изменить интервал между буквами в Textview?
- Как изменить расстояние между буквами в Textview?
- Как настроить Кернинг текста в Android TextView?
- 11 ответов
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 и вставьте текст.
Источник
Как изменить межбуквенный интервал в Textview?
Как изменить интервал между буквами в текстовом виде? Помог ли он, если у меня есть текст HTML (я не могу использовать webview в своем коде).
P.S. Я использую свой собственный шрифт в текстовом виде с текстом HTML.
7 ответов
В зависимости от того, сколько интервалов вам нужно, это может помочь. Это единственное, что дистанционно связано с интервалом между буквами в TextView.
Изменить: см. @JerabekJakub ответ ниже для обновленного, лучшего метода для этого, начиная с api 21 (Lollipop)
Так как API 21 есть опция, задающая расстояние между буквами. Вы можете вызвать метод setLetterSpacing или установить его в XML с атрибутом letterSpacing.
Этот ответ основан на ответе Педро, но настроен так, что он также работает, если текстовый атрибут уже установлен:
Если вы хотите использовать его программно:
после API >= 21 существует метод inbuild, предоставляемый TextView под названием setLetterSpacing
Я построил собственный класс, который расширяет TextView и решает эту проблему. Проверьте мой ответ здесь =)
Для вложения текста HTML в текстовое поле вы можете использовать синтаксис Html.fromHTML() . Дополнительная информация, которую вы получите от http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29
Так как андроид не поддерживает такую вещь, вы можете сделать это вручную с помощью FontCreator. У этого есть хорошие варианты для изменения шрифта. Я использовал этот инструмент для создания пользовательского шрифта, даже если он занимает несколько раз, но вы всегда можете использовать его в своих проектах.
Источник
Как изменить интервал между буквами в Textview?
Как изменить межбуквенный интервал в текстовом окне? Поможет ли это, если у меня будет HTML-текст (я не могу использовать веб-просмотр в своем коде).
PS Я использую свой собственный шрифт в текстовом представлении с текстом HTML.
В зависимости от того, какой интервал вам нужен, это может помочь. Это единственное, что удаленно связано с межбуквенным интервалом в TextView.
Изменить: см. Ответ @ JerabekJakub ниже, чтобы узнать об обновленном, лучшем способе сделать это, начиная с api 21 (Lollipop)
Начиная с API 21 существует возможность установки межбуквенного интервала. Вы можете вызвать метод setLetterSpacing или установить его в XML с атрибутом letterSpacing .
Этот ответ основан на ответе Педро, но настроен так, чтобы он также работал, если текстовый атрибут уже установлен:
Если вы хотите использовать его программно:
после API> = 21 существует метод inbuild, предоставляемый TextView, который называется setLetterSpacing
проверьте это для получения дополнительной информации
Я создал собственный класс, который расширяет TextView и решает эту проблему . Посмотрите мой ответ здесь =)
Поскольку Android не поддерживает такую вещь, вы можете сделать это вручную с помощью FontCreator. Есть хорошие возможности для изменения шрифта. Я использовал этот инструмент для создания собственного шрифта, даже если это займет некоторое время, но вы всегда можете использовать его в своих проектах.
Источник
Как изменить расстояние между буквами в Textview?
Как изменить интервал между буквами в текстовом виде? Помог ли он, если у меня есть текст HTML (я не могу использовать webview в своем коде).
PS Я использую свой собственный шрифт в текстовом виде с текстом HTML.
Проверить андроид: textScaleX
В зависимости от того, сколько интервалов вам нужно, это может помочь. Это единственное, что дистанционно связано с интервалом между буквами в TextView.
Изменить: см. Ответ @ JerabekJakub ниже для обновленного, лучшего метода для этого, начиная с api 21 (Lollipop)
Поскольку API 21 имеет опцию, устанавливающую интервал между буквами. Вы можете вызвать метод setLetterSpacing или установить его в XML с атрибутом letterSpacing .
Этот ответ основан на ответе Педро, но настроен так, что он также работает, если текстовый атрибут уже установлен:
Если вы хотите использовать его программно:
Я построил пользовательский класс, который расширяет TextView и решает эту проблему … Проверьте мой ответ здесь =)
После API> = 21 существует метод inbuild, предоставляемый TextView с именем setLetterSpacing
Проверьте это для более
Поскольку Android не поддерживает такую вещь, вы можете сделать это вручную с помощью FontCreator. У этого есть хорошие варианты для изменения шрифта. Я использовал этот инструмент для создания пользовательского шрифта, даже если он занимает несколько раз, но вы всегда можете использовать его в своих проектах.
Источник
Как настроить Кернинг текста в Android TextView?
есть ли способ настроить расстояние между символами в Android TextView ? Я считаю, что это обычно называется «Кернинг».
Я в курсе android:textScaleX атрибут, но это сжимает символы вместе с интервалом.
11 ответов
AFAIK, вы не можете настроить Кернинг в TextView . Вы можете настроить Кернинг, если нарисуете текст на Canvas самостоятельно, используя API 2D-графики.
Я создал пользовательский класс, который расширяет TextView и добавляет метод «setSpacing». Обходной путь похож на то, что сказал @Noah. Метод добавляет пробел между каждой буквой строки и с SpannedString изменяет TextScaleX пробелов, позволяя положительное и отрицательное расстояние.
надеюсь, что это поможет кому-то ^^
Если кто-то ищет простой способ применить Кернинг к любой строке (технически, CharSequence ) без использования TextView :
вот мое решение, которое добавляет равномерное расстояние (в пикселях) между каждым символом. Этот промежуток предполагает, что весь текст находится в одной строке. Это в основном реализует то, что предлагает @commonsWare.
единственный способ, который я нашел, чтобы настроить Кернинг, это создать пользовательский шрифт, в котором глиф заранее изменяется.
вы также можете попробовать использовать SpannedString но вам нужно будет разобрать его и изменить интервал символов для каждого из слов
этот ответ может быть полезен для тех, кто хочет рисовать текст с кернингом на холсте, используя drawText (это не текст в TextView).
начиная с Lollipop, метод setLetterSpacing доступен на Paint. Если SDK LOLLIPOP и включен, используется setLetterSpacing. В противном случае вызывается метод, который делает что-то похожее на предложение @dgmltn выше:
трудно настроить интервал между символами, когда вы используете TextView. Но если вы можете справиться с рисунком самостоятельно, должен быть какой-то способ сделать это.
мой ответ на этот вопрос: используйте свой пользовательский диапазон .
мой код:
объясняю:
строительство собственного Span может помочь вам достигнуть много изумительного влияния, как делает TextView размытия, изменяет фон или передний план для вашего TextView, даже сделать некоторую анимацию. Я многому учусь из этого поста Span мощная концепция .
поскольку вы добавляете интервал к каждому символу, поэтому мы должны использовать базовый диапазон уровня символов, в этом случае ReplacementSpan-лучший выбор. Я добавляю spacing метод, поэтому при его использовании вы можете просто передать пространство, которое вы хотите для каждого символа в качестве параметра.
при создании пользовательского диапазона вам необходимо переопределить минимум два метода, getSize и draw . The getSize метод должен возвращать конечную ширину после добавления интервала для всего charsequence и внутри draw блок метода, вы можете контролировать Canvas сделать чертеж.
Итак, как мы используем этот LetterSpacingSpan? Это легко:
использование:
есть небольшое редактирование ответа @Pedro Barros. Это полезно, если вы используете SpannableString, чтобы установить его, например, если вы хотите сделать разные цвета некоторых символов:
Я хотел использовать ответ @PedroBarros, но, определив, какой интервал должен быть в пикселе.
вот мое редактирование метода applySpacing:
Я новичок как разработчик Android, пожалуйста, не стесняйтесь дайте мне знать, если это не хорошо !
еще одно решение.
где pixel_1dp-это XML:
чтобы установить интервал, используйте следующий код:
Источник