Как стать автором
Обновить

Комментарии 10

Хех, только на выходных видео смотрел которое судя по всему было источником для этой статьи, спасибо, текстом лучше.
Положение ThemeOverlay в иерархии осталось непонятным.
Напишите, пожалуйста, поподробнее, что вы имеете в виду. Я постараюсь дополнить статью.
В разделе «Последовательность применения тем и стилей ко View-компоненту» ThemeOverlay в иерархии отсутствует.
Как изменения атрибутов в ThemeOverlay повлияют? Что именно будет затронуто? В чем отличие от Theme?

При применении ThemeOverlay мы меняем атрибуты темы только для одной View.


Представьте, что есть тема с параметрами attr1, attr2, attr3, attrN и мы применяем ThemeOverlay, где определен только параметр attr2. ThemeOverlay будет наложен на текущую тему и заменит в ней только attr2. Все остальные параметры останутся без изменений.


Фактически, вы получаете View со своей темой. Вся логика применения стилей работает аналогичным образом.

А как кто решает проблему первого кадра при запуске приложения с разными темами?
Ведь если тема у приложения указана в манифесте, то ОС берет из неё цвет бэка, заливает фон, а уж потом запускает Application.onCreate() и так далее.
Уж очень много приложений, показывающих белый экран пока приложение грузится, а потом уже сменяющих тему на тёмную.

П.С.: Мы решили это прозрачной темой приложения, но в таком случае кажется, что приложение тормозит и слишком долго стартует после нажатия на иконку.
Можно использовать в качестве фона какой нибудь акцентный цвет который присутствует во всем приложении
Средний, между тёмным и светлым? Да, я изначально так сделал. Потом это не понравилось новому дизайнеру.
В стилях определяется отдельная тема с windowBackground для launch экрана.
  <style name="AppTheme" parent="Theme.Base"/>

  <style name="AppTheme.Launch">
    <item name="android:windowBackground">@drawable/bg_launch_screen</item>
  </style>


В манифесте базовой активити сеттится AppTheme.Launch тема, а в onCreate сеттится основная тема
override fun onCreate(savedInstanceState: Bundle?) {
  setTheme(R.style.AppTheme)
  super.onCreate(savedInstanceState)
  setContentView(R.layout.main_activity)
  ...
}
Ага, и если главный цвет приложения зелёный, то делать зелёный сплэш? А тем, у кого красный основной? :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий