Android Studio 3.2.1 Voici ma mise en page:
android:background="#aabbcc"
pour changer l' arrière - plan de MaterialButton, je change de colorAccent dans styles.xml
<item name="colorAccent">@color/colorAccent</item>
Agréable. C'est du travail.
Mais le problème est: je ne veux pas changer colorAccent . Je veux utiliser la couleur de l'arrière-plan pour MaterialButton différente de colorAccent
Attribut:
<com.google.android.material.button.MaterialButton android:id="@+id/bittrexJsonViewButton" android:layout_width="0dp" android:layout_height="@dimen/min_height" android:layout_marginStart="@dimen/half_default_margin" android:layout_marginEnd="@dimen/half_default_margin" android:text="@string/json_view" app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton" app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />
pas d'aide.
6 Réponses :
1ère solution
Vous pouvez utiliser app:backgroundTint
pour changer la couleur de fond de MaterialButton
<com.google.android.material.button.MaterialButton android:id="@+id/bittrexJsonViewButton" android:layout_width="0dp" android:layout_height="@dimen/min_height" android:layout_marginStart="@dimen/half_default_margin" android:layout_marginEnd="@dimen/half_default_margin" app:backgroundTint="@android:color/holo_orange_dark" android:text="@string/json_view" app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton" app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />
2e solution
MaterialButton
utilise colorPrimary
comme arrière-plan lorsque le bouton est à l'état actif et colorOnSurface
lorsqu'il est désactivé. Ainsi, vous pouvez le définir dans votre thème et l'appliquer sur des boutons matériels
Je ne peux pas utiliser app: backgroundTint car minSdkVersion 18
essayez la 2ème solution
Je l'ai essayé avec la version min 18. Il n'y a pas de problème. Je pense que vous n'utilisez pas androidX. Si vous souhaitez utiliser de nouveaux composants matériels, je vous recommande de migrer votre projet vers AndroidX
Je migre vers AndroidX. Si vous exécutez l'application sur Android 5.0, le bouton ne change pas la couleur d'arrière-plan. Dans ce cas, application: backgroundTint - pas d'aide.
Ouais, vous devez utiliser le thème AppCompat sur les versions Lolipop et Pre Lolipop, AFIK
app: backgroundTint fonctionne sur 5.0. Je viens de le tester sur LG ayant la version 5.0
colorOnSurface ne fonctionne pas pour moi pour une raison quelconque :(
@ZaidMirza je viens de tester avec v19 et backgroundTint ne fonctionne pas pour moi aussi j'ai migré vers Android X
Avec le nouveau bouton Matériau, vous avez 2 options:
Utilisation de l'attribut backgroundTint
comme suggéré par Zaid Mirza
C'est la meilleure option à mon avis. Si vous souhaitez remplacer certains attributs de thème d'un style par défaut, vous pouvez utiliser le nouvel attribut materialThemeOverlay
.
Quelque chose comme:
<style name="MtButtonStyle" parent="Widget.MaterialComponents.Button"> <item name="materialThemeOverlay">@style/GreenButtonThemeOverlay</item> </style> <style name="GreenButtonThemeOverlay"> <item name="colorPrimary">@color/green</item> </style>
Il nécessite la version 1.1.0 de la bibliothèque.
Il nécessite le matériel 1.1.0, qui est inexistant comme indiqué ici
@DarioColetto Merci. La réponse n'était pas claire et je viens de la mettre à jour. Pour utiliser l'attribut materialThemeOverlay
la version 1.1.0 est requise. Actuellement, vous pouvez utiliser 1.1.0-beta02
.
@GabrieleMariotti pourriez-vous me faire plaisir avec ce problème stackoverflow.com/questions/60850751/...
2020: Il semble qu'ils viennent de résoudre ce problème le 1er avril 2020.
Il devrait être publié sur la version 1.2.0 beta 1 car le problème GitHub a été résolu en tant que "Corrigé"
Si vous souhaitez définir un dessin personnalisé, vous devez créer l' app:backgroundTint="@null"
. Pour changer simplement l' app:backgroundTint="@color/yourColor"
couleur d'arrière-plan app:backgroundTint="@color/yourColor"
J'utilise actuellement 1.3.0-alpha01
<com.google.android.material.button.MaterialButton android:id="@+id/bittrexJsonViewButton" android:layout_width="0dp" android:layout_height="@dimen/min_height" android:layout_marginStart="@dimen/half_default_margin" android:layout_marginEnd="@dimen/half_default_margin" app:backgroundTint="@null" android:background="@drawable/your_custom_drawable" android:text="@string/json_view" app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton" app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />
Modifiez le backgroundTintMode
à add
, puis votre attribut d' background
- background
sera affiché. Voir l'exemple ci-dessous:
<com.google.android.material.button.MaterialButton android:id="@+id/bittrexJsonViewButton" android:layout_width="0dp" android:layout_height="@dimen/min_height" android:layout_marginStart="@dimen/half_default_margin" android:layout_marginEnd="@dimen/half_default_margin" android:text="@string/json_view" android:background:"#aabbcc" app:backgroundTintMode="add" app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton" app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />
Commentaires demandant de désactiver la couleur à l'aide de colorOnSurface, vous devez utiliser les paramètres du thème,
Comme ça:
<style name="MaterialRedButton" parent="Widget.MaterialComponents.Button"> <item name="materialThemeOverlay">@style/MaterialRedButtonThemeOverlay</item> </style> <style name="MaterialRedButtonThemeOverlay"> <item name="colorPrimary">@android:color/holo_red_dark</item> <item name="colorOnSurface">@color/white</item> </style>