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

Ответ

Для организации стилей в Android приложении лучше использовать темы (Themes) и стили (Styles) в res/values/themes.xml и styles.xml. Основные принципы:

  1. Темы - глобальные атрибуты для всего приложения/активности:
<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
    <item name="colorPrimary">@color/purple_500</item>
    <item name="colorOnPrimary">@color/white</item>
</style>
  1. Стили - повторяемые наборы атрибутов для конкретных View:
<style name="MyButtonStyle" parent="Widget.Material3.Button">
    <item name="android:textColor">@color/white</item>
    <item name="android:backgroundTint">@color/purple_500</item>
</style>
  1. Лучшие практики:
  • Используйте Material Design 3 как базовую тему
  • Разделяйте светлую и темную тему через -night квалификаторы
  • Выносите цвета в отдельный colors.xml
  • Для сложных стилей используйте TextAppearance и ShapeAppearance
  • Избегайте inline-стилей в разметке

Ответ 18+ 🔞

Слушай, я тут смотрю на твой код и думаю — ёпта, ну сколько можно мучать эти inline-стили в разметке! Это же пизда рулю, честно. Прям как в 2002-м году делают.

Вот смотри, чтобы не быть распиздяем, тебе надо юзать нормальные темы и стили. Отдельно, в своих файликах. Первое — Темы. Это как общий дресс-код для всего приложения. Засовываешь их в res/values/themes.xml.

<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
    <item name="colorPrimary">@color/purple_500</item>
    <item name="colorOnPrimary">@color/white</item>
</style>

Видишь? Всё чётко. colorPrimary — это твой основной цвет, типа фирменный такой. colorOnPrimary — это цвет текста, который будет поверх этого самого purple_500. Без этого — манда с ушами получится, поверь.

Дальше, второе — Стили. Это уже не для всего приложения, а для конкретных штук, типа кнопок или текстовых полей. Их кидаешь в styles.xml.

<style name="MyButtonStyle" parent="Widget.Material3.Button">
    <item name="android:textColor">@color/white</item>
    <item name="android:backgroundTint">@color/purple_500</item>
</style>

Вот создал стиль для кнопки. И теперь в разметке вместо того, чтобы каждый раз прописывать android:textColor и android:backgroundTint, ты просто пишешь style="@style/MyButtonStyle". И волнение ебать — все кнопки сразу одинаковые! Хуй с горы, а не подход.

Теперь, насчёт лучших практик, тут без вариантов:

  • Бери за основу Material Design 3. Не выёбывайся, не изобретай велосипед. Они уже всё продумали, там и темы, и стили готовые есть. Просто наследуйся от них, как я в примере показал.
  • Тёмная тема — это не опция, а must have. Все её ждут. Делается просто: создаёшь папку res/values-night, кидаешь туда такой же themes.xml, но с другими цветами — для тёмной темы. Система сама всё подхватит. Не сделаешь — засмеют.
  • Цвета — в отдельный colors.xml. Не трави душу, не пихай хекс-коды прямо в стили. Вынеси их отдельно. Потом, если дизайнер придёт и скажет «смени этот фиолетовый на перламутровый», ты поменяешь в одном месте, а не будешь полдня по всем файлам ползать.
  • Для сложных вещей есть TextAppearance и ShapeAppearance. Хочешь сделать текст особенный или кнопку скруглённую — используй эти специальные стили. Так чище.
  • И главное, блядь: избегай inline-стилей в разметке как огня. Это смерд пердящий в коде. Серьёзно. Ты один раз напишешь android:textSize="16sp" прямо в TextView, потом таких TextView будет овердохуища, и когда понадобится размер поменять, ты просто охуеешь. Выноси в стили. Доверься.

Вот и вся магия. Сначала кажется, что возни много, но потом, когда приложение расти начнёт, ты сам себе спасибо скажешь. А иначе — кот сука собака, один сплошной бардак.