2017-03-13 1 views
1

Je développe une application, mais j'ai rencontré un léger problème. Je suis un grand fan du style bouton Borderless (style="@style/Base.Widget.AppCompat.Button.Borderless.Colored"), mais je ne peux pas changer le rembourrage sur les boutons. Pourquoi ai-je besoin de changer le rembourrage? Parce qu'il y a un minimum de rembourrage ou de largeur des boutons qui peuvent les rendre désagréables, ou simplement faire de la place. Ce problème peut être vu quand il y a très peu de texte:Modifier le remplissage des boutons sans bordure

enter image description here enter image description here

L'espacement plafonnés est là une où la largeur minimum du bouton est « plafonné ». J'ai essayé de définir le remplissage à zéro par programmation et de jouer avec le remplissage en XML mais rien ne fonctionne. J'ai remarqué que le AlertDialog n'a pas cette question aussi mauvais:

enter image description here enter image description here

Vous pouvez voir en arrière-plan de la carte d'espacement « plafonnés » par rapport à la boîte de dialogue. Ma question est, comment puis-je réduire le rembourrage moi-même? Je préférerais ne pas avoir à écrire un style personnalisé pour le bouton.

Répondre

1

Une option consiste à appliquer le style de bouton AlertDialog à votre bouton:

style="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog" 

Pour une réponse plus détaillée, l'espace autour du texte est ici pas exactement le rembourrage en tant que tel. La taille minimale est déterminée par d'autres attributs définis dans le style, ce qui explique pourquoi essayer de modifier le remplissage ne fonctionne pas, le remplissage commence seulement à avoir un effet sur les plus gros boutons (c'est-à-dire le texte plus long).

Si nous trempons dans les styles, cela révèle une technique potentiellement utile pour aider. Le style de bouton AlertDialog ressemble à ceci:

<!-- Alert dialog button bar button --> 
<style name="Widget.Material.Button.ButtonBar.AlertDialog" 
    parent="Widget.Material.Button.Borderless.Colored"> 
    <item name="minWidth">64dp</item> 
    <item name="minHeight">@dimen/alert_dialog_button_bar_height</item> 
</style> 

Ainsi, le bouton AlertDialog hérite en fait du style Borderless.Colored et quelques réglages seulement quelques attributs: minWidth et minHeight.

Vous pouvez également le faire, soit en créant votre propre style similaire à celui ci-dessus, soit en définissant minWidth et/ou minHeight directement sur le bouton.

<Button 
    .... 
    style="@style/Widget.AppCompat.Button.Borderless.Colored" 
    android:minWidth="48dp" 
    android:minHeight=... /> 

Jouer avec ceux-ci, nous l'espérons obtenir le résultat que vous recherchez, et si vous allez aussi loin que le réglage de la minWidth et minHeight à 0DP, il devient tout sur le contenu et le rembourrage.

+0

Merci pour la réponse. Cette solution est meilleure que rien, mais j'espère toujours qu'il y a un moyen de rendre encore moins le rembourrage. – Pythogen

+0

@Pythogen J'ai élargi la réponse, je l'espère plus utile. –