Я хочу сделать что-то очень простое: изменить фон компонента AppBarLayout для всей темы.
Итак, вот моя тема, где я не знаю, какой атрибут перезаписать:
<style name = "BaseTheme" parent = "Theme.MaterialComponents.Light.NoActionBar">
<!-- Some color attributes that doesn't actually matter... -->
</style>
А вот и новая тема для AppBarLayout, которую я хочу применить к теме выше:
<style name = "DefaultAppBarLayout" parent = "Widget.Design.AppBarLayout">
<item name = "android:background">@android:color/transparent</item>
</style>
Должен ли я наследовать стили от другого родителя для BaseTheme? Или к чему <item name = "attribute_name"></item> мне применить мой новый стиль?
<com.google.android.material.appbar.AppBarLayout
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
<androidx.appcompat.widget.Toolbar
android:id = "@+id/more_actionbar"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
app:title = "@string/moremenu_fragment_title"/>
</com.google.android.material.appbar.AppBarLayout>
Это код, который я хочу написать; без указания каждый раз "цвет фона = белый"
Код, который работает для него; но я не хочу писать android:background = "@color/colorTrueWhite" для каждого AppBarLayout в своих XML-файлах
<com.google.android.material.appbar.AppBarLayout
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:background = "@color/colorTrueWhite">
<androidx.appcompat.widget.Toolbar
android:id = "@+id/more_actionbar"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
app:title = "@string/moremenu_fragment_title"/>
</com.google.android.material.appbar.AppBarLayout>
Перезаписать стиль AppBarLayout на указанный ниже
в вашем манифесте убедитесь, что вы добавили стиль по умолчанию Базовая Тема. Это будет применяться к каждому действию в вашем приложении. и если вы хотите какую-то другую тему для другого действия, добавьте определенную тему для действия.
<application
android:allowBackup = "true"
android:icon = "@drawable/ic_logo"
android:label = "@string/app_name"
android:roundIcon = "@drawable/ic_logo"
android:supportsRtl = "true"
android:theme = "@style/BaseTheme"
android:usesCleartextTraffic = "true">
заставить вас стиль что-то вроде этого.
<style name = "BaseTheme" parent = "DefaultAppBarLayout">
<!-- Some color attributes that doesn't actually matter... -->
</style>
<style name = "DefaultAppBarLayout" parent = "Widget.Design.AppBarLayout">
<item name = "android:background">@android:color/transparent</item>
</style>
добавьте эту строку в свою тему
<item name = "colorPrimary">#FF0000</item>
#FF0000 — красный цвет, измените его на любой другой цвет.
Тема установлена как в приложении, так и в действиях, и у меня есть другие пользовательские стили, которые отлично работают. Мне нужно изменить на уровне темы стиль компонента AppBarLayout. Что я не знаю, какой атрибут темы перезаписать
можете ли вы объяснить с изображением и некоторым кодом, что вы именно хотите.
если вы хотите создать свой собственный, тогда не добавляйте родителя. Потому что родитель принесет некоторые предопределенные функции. Создайте стиль без родителя. а затем добавьте этот стиль в качестве родителя в какой-либо другой стиль
Мне нужны все родительские атрибуты, кроме того, который я хочу изменить. Проверьте мое редактирование в вопросе
о, в таком случае просто измените основной цвет в вашей теме на белый или любой другой цвет, который вы хотите
Проблема в том, что все другие компоненты, которые полагаются на colorPrimary (и я хочу, чтобы они полагались на него), станут белыми, и это будет намного больше работы, чем указание фона для AppBarLayout.
У вас есть BaseTheme, так что сделайте его родителем DefaultAppBarLayout.
Итак, вы применяете изменения с DefaultAppBarLayout на BaseTheme.
Код:
<style name = "BaseTheme" parent = "DefaultAppBarLayout"> <!-- Some color attributes that doesn't actually matter... --> </style>
(Еще не пробовал этот метод, но я надеюсь, что он работает)
Редактировать: Не забудьте установить BaseTheme в манифесте.
Я видел атрибут appBarLayoutStyle в классе AppBarLayout, но не знаю, то ли это то, что вы ищете. Если этот атрибут не работает, решение — создать стиль для всех ваших AppBarLayout, указав атрибут android:background и применить style = "@style/YourAppBarLayoutStyle" в каждом AppBarLayout.
да. Но я просто хотел знать, существует ли свойство, которое я мог бы установить для темы, и оно применяется ко всему приложению. Так же, как "buttonStyle" или аналогичный
@ SomerandomITboy, мальчик, вы пробовали использовать атрибут appBarLayoutStyle?
К тому времени, когда этот вопрос был опубликован, он был недоступен. Попробую в понедельник, как только вернусь на работу
В некоторых более поздних версиях, чем 1.0.0 реализации материала Google для зависимостей Android, они добавили appBarLayoutStyle. Я использовал эту версию, когда задал этот вопрос. Думаю, теперь это бессмысленно, но да... решение состоит в том, чтобы перейти на более новую версию библиотеки дизайна материалов и использовать настраиваемый атрибут в вашем <style name = "AppTheme">
изменить с чем?