Комментарии 10
Хех, только на выходных видео смотрел которое судя по всему было источником для этой статьи, спасибо, текстом лучше.
Положение ThemeOverlay в иерархии осталось непонятным.
Напишите, пожалуйста, поподробнее, что вы имеете в виду. Я постараюсь дополнить статью.
В разделе «Последовательность применения тем и стилей ко View-компоненту» ThemeOverlay в иерархии отсутствует.
Как изменения атрибутов в ThemeOverlay повлияют? Что именно будет затронуто? В чем отличие от Theme?
Как изменения атрибутов в ThemeOverlay повлияют? Что именно будет затронуто? В чем отличие от Theme?
При применении ThemeOverlay
мы меняем атрибуты темы только для одной View
.
Представьте, что есть тема с параметрами attr1
, attr2
, attr3
, attrN
и мы применяем ThemeOverlay
, где определен только параметр attr2
. ThemeOverlay
будет наложен на текущую тему и заменит в ней только attr2
. Все остальные параметры останутся без изменений.
Фактически, вы получаете View
со своей темой. Вся логика применения стилей работает аналогичным образом.
А как кто решает проблему первого кадра при запуске приложения с разными темами?
Ведь если тема у приложения указана в манифесте, то ОС берет из неё цвет бэка, заливает фон, а уж потом запускает Application.onCreate() и так далее.
Уж очень много приложений, показывающих белый экран пока приложение грузится, а потом уже сменяющих тему на тёмную.
П.С.: Мы решили это прозрачной темой приложения, но в таком случае кажется, что приложение тормозит и слишком долго стартует после нажатия на иконку.
Ведь если тема у приложения указана в манифесте, то ОС берет из неё цвет бэка, заливает фон, а уж потом запускает Application.onCreate() и так далее.
Уж очень много приложений, показывающих белый экран пока приложение грузится, а потом уже сменяющих тему на тёмную.
П.С.: Мы решили это прозрачной темой приложения, но в таком случае кажется, что приложение тормозит и слишком долго стартует после нажатия на иконку.
Можно использовать в качестве фона какой нибудь акцентный цвет который присутствует во всем приложении
В стилях определяется отдельная тема с windowBackground для launch экрана.
В манифесте базовой активити сеттится AppTheme.Launch тема, а в onCreate сеттится основная тема
<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)
...
}
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Темы и стили в Android-приложениях