web-dev-qa-db-fra.com

Impossible de changer la couleur d'arrière-plan sur MaterialButton sans changer la couleurAccent

Android Studio 3.2.1 Voici ma mise en page:

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

changer MaterialButton's fond je change colorAccent in 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 d'arrière-plan pour MaterialButton's différente de colorAccent

Attribut:

Android:background="#aabbcc"

pas d'aide.

12
a_subscriber

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 actif et colorOnSurface lorsqu'il est désactivé. Vous pouvez donc le définir dans votre thème et l'appliquer sur des boutons de matière

12
Zaid Mirza

Avec le nouveau bouton Matériel vous avez 2 options:

  1. Utilisation de l'attribut backgroundTint comme suggéré par Zaid Mirza

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

10
Gabriele Mariotti

2020: Il semble qu'ils viennent de corriger cela le 1er avril 2020.

Il devrait être publié sur 1.2.0 beta 1 depuis le le problème GitHub a été fermé comme "Fixed"

0