web-dev-qa-db-fra.com

Comment personnaliser le style des boutons de matériau AppCompat?

J'utilise le thème AppCompat et je veux définir l'attribut minHeight sur mes boutons:

<style name="Theme.MyTheme" parent="Theme.AppCompat">
    <item name="Android:buttonStyle">@style/MyButtonStyle</item>
</style>

<style name="MyButtonStyle" parent="...?">
    <item name="Android:minHeight">60dp</item>
</style>

Cependant, il n'y a pas de style Widget.AppCompat.Button à définir comme parent pour MyButtonStyle. Si j'utilise Android:Widget.Button, alors tous mes boutons ressemblent au vieux style de merde. J'ai essayé divers autres thèmes AppCompat comme TextAppearance.AppCompat.Button, mais ils ne fonctionnent pas.

Si vous omettez un thème parent pour le style du bouton, le style du bouton ne sera pas correct.

Comment puis-je personnaliser la valeur par défaut Theme.AppCompatbuttonStyle?

11
Jeff Mixon

Vous pouvez avoir Base.MyButtonStyle extend Android:Widget.Holo.Button sur l'API 14+ (dans res/values-v14/styles.xml) et Android:Widget.Material.Button sur l'API 21+ (dans res/values-v21/styles.xml. Ce style changera en fonction de la version du système de votre appareil. Mettez les modifications spécifiques à votre plate-forme ici.

Ensuite, ayez MyButtonStyle extend Base.MyButtonStyle et définissez le Android:minHeight ici (dans res/values/styles.xml). Cela s'appliquera à toutes les plateformes.

Vos boutons peuvent alors utiliser le style MyButtonStyle.

Cet exemple suppose que votre SDK minimum est de 14.

Et oui, il n'y a pas de style de bouton appcompat-v7 (enfin, du moins pas encore).

MODIFIER

Cela suppose que vous êtes d'accord avec le bouton Holo sur les plates-formes plus anciennes que Lollipop. Cela semble discret et si vous pouvez vous passer d'ondulations, ça devrait aller. Si vous voulez des ondulations, je vous suggère de rechercher une bibliothèque de boutons Lollipop tierce.

3
Eugen Pechanec

Pour répondre à ma propre question, il apparaît AppCompat ne prend actuellement pas en charge le widget Button:

AppCompat fournit un comportement similaire sur les versions antérieures d'Android Pour un sous-ensemble de widgets d'interface utilisateur:

  • Tout ce qui est fourni par la barre d’outils AppCompat (modes d’action, etc.)
  • Éditer le texte
  • Fileur
  • CheckBox
  • Bouton radio
  • Changer (utilisez le nouveau Android.support.v7.widget.SwitchCompat)
  • CheckedTextView

La seule solution que je vois serait de recréer le style du bouton Matériau à partir du code source Android, une tâche qui dépasse le cadre de mes souhaits.

4
Jeff Mixon

Style de bouton personnalisé avec AppCompat +22 Dans vos styles.xml 

<style name="Button.Tinted" parent="Widget.AppCompat.Button">
        <item name="colorButtonNormal">YOUR_TINT_COLOR</item>
        <item name="colorControlHighlight">@color/colorAccent</item>
        <item name="Android:textColor">@Android:color/white</item> </style>

dans votre layout.xml

<Button
        Android:id="@+id/but_next"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="@string/but_continue"
        Android:theme="@style/Button.Tinted" />
2
ingyesid

Supprimer le Android:

<style name="Theme.MyTheme" parent="Theme.AppCompat">
    <item name="buttonStyle">@style/MyButtonStyle</item>
</style>

https://stackoverflow.com/a/32363833

0