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?
<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"
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>
4 Réponses :
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.
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
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.
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
.
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
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
changer avec quoi?
Remplacer le style AppBarLayout par celui spécifié ci-dessous