name="AppTheme"
parent="
Theme.AppCompat.Light.DarkActionBar
">
name="colorPrimary">@color/colorPrimary
name="colorPrimaryDark">@color/colorPrimaryDark
name="colorAccent">@color/colorAccent
name="AppTheme"
parent="Theme.AppCompat.Light.DarkActionBar">
name="StrongBeatBoxButton"
parent="@style/BeatBoxButton">
- bold
name="AppTheme"
parent="Theme.AppCompat.Light.DarkActionBar">
...
name="AppTheme"
parent="Theme.AppCompat
.Light.DarkActionBar
">
...
name="AppTheme"
parent="Theme.AppCompat">
name="colorPrimary">@color/
colorPrimaryred<
/item>
name="colorPrimaryDark">@color/
colorPrimary
Darkdark_red
name="colorAccent">@color/
colorAccentgray
item>
name="Theme.AppCompat"
parent="Base.Theme.AppCompat" />
Тема
Theme.AppCompat
наследует
атрибуты
от
Base.Theme.AppCompat
. Интересно, что
Theme.AppCompat
не
переопределяет никакие атрибуты, а только содержит ссылку
на своего родителя.
Щелкните мышью по
Base.Theme.AppCompat
с нажатой
клавишей (
Ctrl
). Android Studio сообщит, что тема уточняется
по ресурсам. Существует несколько разных версий этой темы в
зависимости от используемой версии Android.
Рис. 21.6. Список версий родительской темы для выбора
Выбор неклассифицированной версии может показаться
странным, так как минимальная поддерживаемая версия API
вашего приложения — 21. Мы сделали именно так, потому что
атрибут фоновой темы существует гораздо дольше, чем API 21,
и поэтому он должен существовать в оригинальной версии
Base.Theme.AppCompat
.
name="Base.Theme.AppCompat"
parent="Base.V7.Theme.AppCompat">
Base.Theme.AppCompat
— еще одна тема, которая
существует только ради имени и не переопределяет никакие
атрибуты.
Вернитесь
к
родительской
теме:
Base.V7.Theme.AppCompat
.
name="Base.V7.Theme.AppCompat"
parent="Platform.AppCompat">
-
androidx.appcompat.app.AppCompatVie
wInflater
- false
- true
name="windowActionBarOverlay">false
...
Постепенно круг замыкается. Просмотрите список
атрибутов
Base.V7.Theme.AppCompat
.
На первый взгляд нет атрибута, который соответствовал бы
цели:
изменению
цвета
фона.
Перейдите
к
Platform.AppCompat
. Вы увидите, что и эта тема уточняется
по ресурсам. Выберите версию
values/values.xml
.
name="Platform.AppCompat"
parent="android:Theme.Holo">
name="android:windowNoTitle">true
name="android:windowActionBar">false
- ?
attr/buttonBarStyle
- ?
attr/buttonBarButtonStyle
name="android:borderlessButtonStyle">?
attr/borderlessButtonStyle
...
Наконец-то
мы
видим,
что
родителем
темы
Platform.AppCompat
является тема
android:Theme.Holo
.
Обратите внимание: ссылка на родительскую тему не
записывается в виде
Theme
, а имеет пространство имен
android
. К ней также добавляется префикс пространства имен
android.
Считайте, что библиотека AppCompat находится внутри
вашего приложения. При сборке проекта вы включаете
библиотеку AppCompat, которую сопровождает набор файлов с
кодом Kotlin (и Java) и разметкой XML. Эти файлы практически
ничем не отличаются от файлов, которые вы пишете
самостоятельно. Если вы захотите сослаться на какой-либо
компонент из библиотеки AppCompat, вы делаете это
напрямую, используя запись
Theme.AppCompat
, потому что
эти файлы существуют в вашем приложении.
Темы, существующие в ОС Android, такие как
Theme
,
должны объявляться с пространством имен, указывающим на
их местоположение. Библиотека AppCompat использует запись
android:Theme
, потому что тема существует в ОС Android.
Наконец мы пришли к месту назначения. Здесь
представлено гораздо больше атрибутов, чем вам захочется
переопределять в своей теме. Конечно, вы можете перейти к
родителю
Platform.AppCompat
—
Theme.Holo
, но это не
обязательно. Тема определяет все атрибуты, которые вам
понадобятся.
Прямо над текстовыми атрибутами есть объявление
windowBackground
. По имени атрибута можно предположить,
что он определяет цвет фона темы.
name="Platform.AppCompat"
parent="android:Theme.Holo">
...
...
name="android:windowBackground">@color/backgrou
nd_material_dark
Этот атрибут должен переопределяться в приложении
BeatBox. Вернитесь к файлу
styles.xml
и переопределите
атрибут
windowBackground
.
Do'stlaringiz bilan baham: |