3
votes

Comment changer le style d'AppBarLayout dans tout le thème?

Je veux faire quelque chose de très simple: changer l'arrière-plan du composant AppBarLayout pour l'ensemble du thème.

Voici donc mon thème, où je ne sais pas quel attribut remplacer:

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

Et voici le nouveau thème pour AppBarLayout que je souhaite appliquer au thème ci-dessus:

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

Dois-je hériter des styles d'un autre parent pour le BaseTheme ? Ou à quel dois-je appliquer mon nouveau style?

EDIT 1

 Comportement actuel

<style name="DefaultAppBarLayout" parent="Widget.Design.AppBarLayout">
    <item name="android:background">@android:color/transparent</item>
</style>

C'est le code que je veux écrire; sans spécifier à chaque fois "background color = white"

Comportement souhaité

Code qui fonctionne pour cela; mais je ne veux pas écrire android: background = "@ color / colorTrueWhite" pour chaque AppBarLayout dans mes fichiers XML

<style name="BaseTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- Some color attributes that doesn't actually matter... -->

</style>


2 commentaires

changer avec quoi?


Remplacer le style AppBarLayout par celui spécifié ci-dessous


4 Réponses :


0
votes

dans votre manifeste, assurez-vous d'ajouter le style par défaut BaseTheme Cela s'appliquera à toutes les activités de votre application. et si vous voulez un autre thème pour une activité différente, ajoutez un thème spécifique à une activité.

<item name="colorPrimary">#FF0000</item>

vous donne un style comme celui-ci.

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

ajoutez cette ligne dans votre thème

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

# FF0000 est la couleur rouge changez-la en la couleur que vous voulez.


6 commentaires

Le thème est défini à la fois dans l'application et dans les activités et j'ai d'autres styles personnalisés qui fonctionnent parfaitement. J'ai besoin de changer au niveau du thème le style du composant AppBarLayout . Lequel je ne sais pas quel attribut du thème remplacer


pouvez-vous expliquer avec l'image et du code ce que vous voulez exactement.


si vous voulez créer votre personnalisé, n'ajoutez pas de parent alors. Parce que le parent apportera des fonctionnalités prédéfinies. Faites un style sans parent. puis ajoutez ce style en tant que parent dans un autre style


Je veux tous les attributs parents, sauf celui que je veux changer. Vérifier ma modification dans la question


oh dans ce cas, changez simplement la couleur principale de votre thème en blanc ou où vous le souhaitez


Le problème est que tous les autres composants qui reposent sur le colorPrimary (et je veux qu'ils s'appuient dessus) vont passer au blanc et cela va demander beaucoup plus de travail que de spécifier l'arrière-plan de l'AppBarLayout



0
votes

Vous avez votre BaseTheme , alors rendez-le parent de DefaultAppBarLayout . Vous appliquez donc les modifications de DefaultAppBarLayout à BaseTheme .

Code:

(Je n'ai pas encore essayé cette méthode, mais j'espère qu'elle fonctionne)

Modifier: N'oubliez pas de définir BaseTheme dans le manifeste.


0 commentaires

0
votes

J'ai vu l'attribut appBarLayoutStyle dans la classe AppBarLayout , mais je ne sais pas si c'est ce que vous recherchez. Si cet attribut ne fonctionne pas, une solution consiste à créer un style pour tous vos AppBarLayout , en spécifiant l'attribut android: background et en appliquant style = "@ style / YourAppBarLayoutStyle " dans chaque AppBarLayout .


3 commentaires

Oui. Mais je voulais juste savoir s'il existait une propriété que je pourrais définir par thème et qu'elle s'applique à l'ensemble de l'application. Tout comme "buttonStyle" ou similaire


@SomerandomITboy boy Avez-vous essayé l'attribut appBarLayoutStyle?


Elle n'était pas disponible au moment où cette question a été publiée. J'essaierai le lundi dès que je serai de retour au travail



1
votes

Dans une version supérieure à 1.0.0 de l'implémentation matérielle de google pour la dépendance Android, ils ont ajouté le appBarLayoutStyle . J'utilisais cette version lorsque j'ai posé cette question. Je suppose que maintenant c'est un peu inutile, mais oui ... la solution est de passer à une version plus récente de la bibliothèque de conception de matériaux et d'utiliser l'attribut personnalisable dans votre