Android textview расстояние между буквами

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.

Этот ответ основан на ответе Педро, но настроен так, что он также работает, если текстовый атрибут уже установлен:

Если вы хотите использовать его программно:

Читайте также:  Phoenix android 32 bit

после 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:

чтобы установить интервал, используйте следующий код:

Источник

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