web-dev-qa-db-fra.com

Impossible d'utiliser Android: arrière-plan avec bouton des nouveaux composants matériels

J'utilise les nouveaux composants matériels com.google.Android.material:material avec Android x mais je ne peux pas définir d'arrière-plan personnalisé pour le bouton.

Je sais que je peux utiliser app:backgroundTint pour changer la couleur

mais l'arrière-plan par défaut a un rembourrage dont je veux me débarrasser, et l'ancienne façon d'utiliser Android:background pour définir mon propre arrière-plan mais cela ne fonctionne plus.

J'ai regardé le docs mais je ne trouve aucune mention à ce changement.

7
humazed

La documentation de la classe MaterialButton dit:

N'utilisez pas le Android:background attribut. MaterialButton gère son propre arrière-plan dessinable, et la définition d'un nouveau fond signifie que MaterialButton ne peut plus garantir que les nouveaux attributs qu'il introduit fonctionneront correctement. Si l'arrière-plan par défaut est modifié, MaterialButton ne peut garantir un comportement bien défini.

Cependant, le readme de GitHub dit:

Remarque: MaterialButton est visuellement différent de Button et AppCompatButton. L'une des principales différences est que AppCompatButton a un 4dp encart à gauche et à droite, contrairement à MaterialButton.

Cela ne mentionne que l'encart gauche/droite, mais la section Attributs du fichier Lisez-moi montre que les quatre encarts sont pris en charge:

enter image description here

Vous pouvez donc ajouter ces attributs à votre <MaterialButton> tag:

Android:insetTop="0dp"
Android:insetBottom="0dp"
7
Ben P.

Avec la nouvelle version 1.1.0 ('com.google.Android.material: material: 1.1.0') si vous souhaitez remplacer certains attributs de thème à partir d'un style par défaut, vous pouvez utiliser new materialThemeOverlay attribut.

Dans votre cas, vous pouvez faire 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>
1
Gabriele Mariotti