Найти тему

Как раскрасить текст в приложении?

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

Есть несколько вариантов:

  1. Текст у нас находится в ресурсах, мы изначально знаем его и он не изменится. Тогда всё просто: окружаем нужные кусочки текста с помощью тэгов <font color = "какой-то цвет">какой-то текст</font>. Получится как-то так:
    <string name="text_with_font">Some white text with <font color="#FFC107">yellow text</font></string>
  2. Мы не знаем текст заранее. Например, он приходит с бэка или мы будем менять его в зависимости от ситуации. Тут всё немного сложнее. Нам поможет SpannableString.

Что тут происходит?

  • Создаем SpannableString, куда передаем текст, где будет что-то цветное.
  • Делаем setSpan, где и происходит вся магия. Передаем внутрь цвет; индекс, откуда начинаем красить; индекс, где заканчиваем. И флаг, который показывает, как будет вести себя строка, если мы добавим еще какие-то буквы (произойдет смещение индексов и строке надо понимать, окрашивать новые буквы или нет).
  • Присваиваем spannableString в нужное место.
  • Готово.

Пример можно посмотреть здесь: https://github.com/Ladgertha/TestApplication

Дубль статей в телеграмме — https://t.me/android_junior

Мои заметки в телеграмме — https://t.me/android_junior_notes