¿Cómo reduzco el relleno interno alrededor del texto dentro de un objeto de botón de Android?

91

Botones de ejemplo

Entonces, en este momento tengo un botón que se parece a la primera imagen de arriba. ¿Cómo puedo reducir el relleno alrededor del texto dentro del propio botón (para parecerse más a la segunda imagen)?

El ancho y la altura del diseño se establecen como:

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

La forma de estilo personalizado tiene parámetros "

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

El resto son atributos de color y valores de radios.

Para que quede claro, quiero que el marco del botón abrace el texto "Iniciar sesión" más cerca.

Se agradece enormemente toda la ayuda y los comentarios. Gracias.

Imran Nueva Zelanda
fuente
1
android: acolchado = "10DP reducir 10 dp a 5 dp
Raghunandan
Eso se relaciona con el acolchado exterior del Botón. Me refiero al relleno interno de "login" y su contenedor. Pero gracias.
Imran NZ
Esto me ayudó - stackoverflow.com/a/19227057/3325759 (autor - @StinePike) De la respuesta - Agregarandroid:includeFontPadding="false"
Mikelis Kaneps
anular el relleno funciona para mí. textView.setPadding (0,0,0,0);
M. Usman Khan
2
Ponga android: minHeight = "0dp" android: minWidth = "0dp" en el botón. Esto debería funcionar ...
viper

Respuestas:

234

Me tomó una eternidad encontrar esto, pero el "relleno" alrededor del texto en un botón no es realmente relleno en absoluto. El estilo Widget.Button predeterminado incluye una propiedad minHeight. Cambiar minHeight en el botón le permitirá ajustar el acolchado como se esperaba.

<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
fuente
6
Estaba enfrentando un problema similar con el ancho. La configuración de android: minWidth = "0dp" funcionó, pero luego en los botones con texto largo, necesitaba que android: paddingRight y android: paddingLeft se configuraran para evitar un diseño deficiente.
Simon Featherstone
My Widget.Button no tiene minHeight (sdk28)
ror
La propiedad está en el botón del tema, no en el "Widget.Button" principal. Si está utilizando un tema diferente a "holo", puede estar en una ubicación diferente. Aquí están los estilos para "holo" android.googlesource.com/platform/frameworks/base/+/master/core/…
Steven
4

prueba esto en tu archivo shape.xml personalizado

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

también puedes hacer cambios en el xml de tu botón

android:layout_width="wrap_content"
android:layout_height="wrap_content"
Qadir Hussain
fuente
2
Esto no funciona en absoluto si lee lo que dice la pregunta original
Jeremy
4

En la biblioteca de componentes de materiales, MaterialButtontiene un estilo predeterminado con insetBottomy insetTopcon un valor de 6dp.

Puede cambiarlos en el diseño:

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

o en un estilo:

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

ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí

Gabriele Mariotti
fuente
1

Si desea un acolchado superior e inferior más pequeño, use esto:

 android:paddingTop="2dp"
 android:paddingBottom="2dp"
Neoh
fuente
Eso es por el acolchado fuera del botón. El efecto que busco es acercar el marco del botón para acercar el texto "Iniciar sesión". Gracias.
Imran NZ
1
Ese ya es el acolchado interior del botón. Es posible que deba verificar si ha agregado líneas como android:paddingo android:layout_margin"en las vistas principales de <shape />.
Neoh
0

Puede usar el estilo sin bordes en AppCompatButton como se muestra a continuación. También use el color de fondo que prefiera.

Widget.AppCompat.Button.Borderless.Colored

Código de botón

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

Salida:

ingrese la descripción de la imagen aquí

Shihab Uddin
fuente