Comment réduire le rembourrage intérieur autour du texte dans un objet bouton Android?

89

Exemples de boutons

Donc, pour le moment, j'ai un bouton qui ressemble à la première image ci-dessus. Comment réduire le remplissage autour du texte à l'intérieur du bouton lui-même (pour ressembler davantage à la deuxième image)?

La largeur et la hauteur de la mise en page sont définies comme suit:

android:layout_width="match_parent"
android:layout_height="wrap_content"

La forme de style personnalisé a des paramètres "

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">

Le reste n'étant que des attributs de couleur et des valeurs de rayons.

Juste pour être clair, je veux que le cadre du bouton épouse le texte "Connexion" plus près.

Toute aide et rétroaction est grandement appréciée. Merci.

Imran NZ
la source
1
android: padding = "10dp réduit 10 dp à 5dp
Raghunandan
Cela concerne le rembourrage extérieur du Button. Je fais référence au remplissage interne de "login" et de son conteneur. Merci quand même.
Imran NZ
Cela m'a aidé - stackoverflow.com/a/19227057/3325759 (auteur - @StinePike) De la réponse - Ajouterandroid:includeFontPadding="false"
Mikelis Kaneps
remplacer le rembourrage fonctionne pour moi. textView.setPadding (0,0,0,0);
M. Usman Khan
2
Mettez android: minHeight = "0dp" android: minWidth = "0dp" dans le bouton. Cela devrait fonctionner ..
viper

Réponses:

232

Il m'a fallu une éternité pour trouver cela, mais le "remplissage" autour du texte dans un bouton n'est pas vraiment un remplissage du tout. Le style Widget.Button par défaut inclut une propriété minHeight. Changer minHeight sur le bouton vous permettra d'ajuster le rembourrage comme prévu.

<Button
        android:id="@+id/header"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/test"
        android:textColor="@color/black"
        android:minHeight="40dip"/>


<style name="Widget.Holo.Button" parent="Widget.Button">
    <item name="android:background">@android:drawable/btn_default_holo_dark</item>
    <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
    <item name="android:textColor">@android:color/primary_text_holo_dark</item>
    <item name="android:minHeight">48dip</item>
    <item name="android:minWidth">64dip</item>
</style>
Steven
la source
6
J'étais confronté à un problème similaire avec la largeur. La configuration android: minWidth = "0dp" fonctionnait, mais sur les boutons avec du texte long, j'avais besoin de android: paddingRight et android: paddingLeft pour éviter une mauvaise mise en page.
Simon Featherstone
Mon Widget.Button n'a pas de minHeight (sdk28)
ror
La propriété se trouve sur le bouton de thème, pas sur le parent "Widget.Button". Si vous utilisez un thème différent de "holo", il se peut qu'il se trouve dans un emplacement différent. Voici les styles pour "holo" android.googlesource.com/platform/frameworks/base
Steven
3

essayez ceci dans votre fichier shape.xml personnalisé

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="1dp"
android:padding="1dp">

vous pouvez également apporter des modifications au xml de votre bouton

android:layout_width="wrap_content"
android:layout_height="wrap_content"
Qadir Hussain
la source
2
Cela ne fonctionne pas du tout si vous lisez ce que la question originale pose
Jeremy
1

Dans la bibliothèque de composants de matériaux, le MaterialButtona un style par défaut avec insetBottomet insetTopavec une valeur de 6dp.

Vous pouvez les modifier dans la mise en page:

  <com.google.android.material.button.MaterialButton
      android:insetTop="0dp"
      android:insetBottom="0dp"
      ../>

ou dans un style:

 <style name="Button_no_insets" parent="Widget.MaterialComponents.Button"..>
    <item name="android:insetTop">0dp</item>
    <item name="android:insetBottom">0dp</item>
 </style>

entrez la description de l'image icientrez la description de l'image ici

Gabriele Mariotti
la source
0

Si vous voulez un rembourrage supérieur et inférieur plus petit, utilisez ceci:

 android:paddingTop="2dp"
 android:paddingBottom="2dp"
Neoh
la source
C'est pour le rembourrage à l'extérieur du bouton. L'effet que je recherche est de rapprocher le cadre du bouton du texte "Login". Merci.
Imran NZ
1
C'est déjà le rembourrage intérieur du bouton. Vous devrez peut-être vérifier si vous avez ajouté des lignes comme android:paddingou android:layout_margin"dans les vues parentes de <shape />.
Neoh
0

Vous pouvez utiliser le style Borderless dans AppCompatButton comme ci-dessous. Utilisez également la couleur de fond de votre choix.

Widget.AppCompat.Button.Borderless.Colored

Code du bouton

<androidx.appcompat.widget.AppCompatButton
        android:id="@+id/button_visa_next"
        android:background="@color/colorPrimary"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/spacing_normal"
        android:text="@string/next"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

Production:

entrez la description de l'image ici

Shihab Uddin
la source