Как изменить стиль AppBarLayout во всей теме? - PullRequest
2 голосов
/ 25 марта 2019

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

Current behavior

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

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

Desired behavior

код, который работает для него;но я не хочу писать 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>

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

У вас есть BaseTheme, поэтому сделайте его родительским DefaultAppBarLayout. Таким образом, вы применяете изменения от DefaultAppBarLayout до BaseTheme.

Код:

<style name="BaseTheme" parent="DefaultAppBarLayout"> <!-- Some color attributes that doesn't actually matter... --> </style>

(еще не пробовал этот метод, но я надеюсь, что он работает)

Edit: Не забудьте указать BaseTheme в манифесте.

0 голосов
/ 25 марта 2019

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

<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 - это красный цвет, измените его на любой, какой вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...