Как изменить стиль AppBarLayout во всей теме?

Я хочу сделать что-то очень простое: изменить фон компонента 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> мне применить мой новый стиль?

РЕДАКТИРОВАТЬ 1

Как изменить стиль AppBarLayout во всей теме?

<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>

Это код, который я хочу написать; без указания каждый раз "цвет фона = белый"

Как изменить стиль 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>

изменить с чем?

007 25.03.2019 12:08

Перезаписать стиль AppBarLayout на указанный ниже

Some random IT boy 25.03.2019 12:10
5
2
3 891
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

в вашем манифесте убедитесь, что вы добавили стиль по умолчанию Базовая Тема. Это будет применяться к каждому действию в вашем приложении. и если вы хотите какую-то другую тему для другого действия, добавьте определенную тему для действия.

<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. Что я не знаю, какой атрибут темы перезаписать

Some random IT boy 25.03.2019 12:14

можете ли вы объяснить с изображением и некоторым кодом, что вы именно хотите.

007 25.03.2019 12:16

если вы хотите создать свой собственный, тогда не добавляйте родителя. Потому что родитель принесет некоторые предопределенные функции. Создайте стиль без родителя. а затем добавьте этот стиль в качестве родителя в какой-либо другой стиль

007 25.03.2019 12:19

Мне нужны все родительские атрибуты, кроме того, который я хочу изменить. Проверьте мое редактирование в вопросе

Some random IT boy 25.03.2019 12:25

о, в таком случае просто измените основной цвет в вашей теме на белый или любой другой цвет, который вы хотите

007 25.03.2019 12:31

Проблема в том, что все другие компоненты, которые полагаются на colorPrimary (и я хочу, чтобы они полагались на него), станут белыми, и это будет намного больше работы, чем указание фона для AppBarLayout.

Some random IT boy 25.03.2019 12:33

У вас есть 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" или аналогичный

Some random IT boy 06.09.2019 22:52

@ SomerandomITboy, мальчик, вы пробовали использовать атрибут appBarLayoutStyle?

Ricardo 06.09.2019 23:00

К тому времени, когда этот вопрос был опубликован, он был недоступен. Попробую в понедельник, как только вернусь на работу

Some random IT boy 06.09.2019 23:01
Ответ принят как подходящий

В некоторых более поздних версиях, чем 1.0.0 реализации материала Google для зависимостей Android, они добавили appBarLayoutStyle. Я использовал эту версию, когда задал этот вопрос. Думаю, теперь это бессмысленно, но да... решение состоит в том, чтобы перейти на более новую версию библиотеки дизайна материалов и использовать настраиваемый атрибут в вашем <style name = "AppTheme">

Другие вопросы по теме