Мы все знаем как сделать весь текст другого цвета. Но что делать, если приходит дизайнер и приносит макет, а там каждое слово разного цвета? Кажется, что ситуация достаточно простая, но да, бывает так, что не все разработчики знают как тут сделать правильно (и это нормально).
Есть несколько вариантов:
- Текст у нас находится в ресурсах, мы изначально знаем его и он не изменится. Тогда всё просто: окружаем нужные кусочки текста с помощью тэгов <font color = "какой-то цвет">какой-то текст</font>. Получится как-то так:
<string name="text_with_font">Some white text with <font color="#FFC107">yellow text</font></string> - Мы не знаем текст заранее. Например, он приходит с бэка или мы будем менять его в зависимости от ситуации. Тут всё немного сложнее. Нам поможет SpannableString.
Что тут происходит?
- Создаем SpannableString, куда передаем текст, где будет что-то цветное.
- Делаем setSpan, где и происходит вся магия. Передаем внутрь цвет; индекс, откуда начинаем красить; индекс, где заканчиваем. И флаг, который показывает, как будет вести себя строка, если мы добавим еще какие-то буквы (произойдет смещение индексов и строке надо понимать, окрашивать новые буквы или нет).
- Присваиваем spannableString в нужное место.
- Готово.
Пример можно посмотреть здесь: https://github.com/Ladgertha/TestApplication
Дубль статей в телеграмме — https://t.me/android_junior
Мои заметки в телеграмме — https://t.me/android_junior_notes