Como reduzo o preenchimento interno ao redor do texto em um objeto de botão do Android?

89

Botões de exemplo

Então, no momento eu tenho um botão que se parece com a primeira imagem acima. Como reduzo o preenchimento ao redor do texto dentro do próprio botão (para se parecer mais com a segunda imagem)?

A largura e a altura do layout são definidas como:

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

A forma de estilo personalizado tem parâmetros "

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

Com o resto sendo apenas atributos de cores e valores de raios.

Só para deixar claro, quero que o quadro do botão fique mais próximo do texto "Login".

Toda ajuda e feedback são muito apreciados. Obrigado.

Imran NZ
fonte
1
android: padding = "10 dp reduzir 10 dp para 5 dp
Raghunandan
Isso está relacionado ao preenchimento externo do Botão. Estou me referindo ao preenchimento interno de "login" e seu contêiner. Obrigado.
Imran NZ
Isso me ajudou - stackoverflow.com/a/19227057/3325759 (autor - @StinePike) Da resposta - Adicionarandroid:includeFontPadding="false"
Mikelis Kaneps
substituir o preenchimento funciona para mim. textView.setPadding (0,0,0,0);
M. Usman Khan
2
Coloque android: minHeight = "0dp" android: minWidth = "0dp" no botão. Isso deve funcionar ..
viper

Respostas:

232

Levei uma eternidade para encontrar isso, mas o "preenchimento" ao redor do texto em um botão não é realmente preenchimento. O estilo Widget.Button padrão inclui uma propriedade minHeight. Alterar minHeight no botão permitirá que você ajuste o preenchimento conforme o esperado.

<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
fonte
6
Eu estava enfrentando um problema semelhante com a largura. A configuração android: minWidth = "0dp" funcionou, mas nos botões com texto longo, exigi que android: paddingRight e android: paddingLeft fossem configurados para evitar um layout ruim.
Simon Featherstone
Meu Widget.Button não tem minHeight (sdk28)
ror
A propriedade está no botão do tema, não no pai "Widget.Button". Se você estiver usando um tema diferente de "holo", ele pode estar em um local diferente. Aqui estão os estilos para "holo" android.googlesource.com/platform/frameworks/base/+/master/core/…
Steven
3

tente isso em seu arquivo 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">

também você pode fazer alterações no xml do seu botão

android:layout_width="wrap_content"
android:layout_height="wrap_content"
Qadir Hussain
fonte
2
Isso não funciona se você ler o que a pergunta original está perguntando
Jeremy
1

Na Biblioteca de componentes de materiais, o MaterialButtontem um estilo padrão com insetBottome insetTopcom um valor de 6dp.

Você pode alterá-los no layout:

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

ou em um estilo:

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

insira a descrição da imagem aquiinsira a descrição da imagem aqui

Gabriele Mariotti
fonte
0

Se você quiser um preenchimento superior e inferior menor, use este:

 android:paddingTop="2dp"
 android:paddingBottom="2dp"
Neoh
fonte
Isso é para o preenchimento fora do botão. O efeito que procuro é fazer com que o quadro do Botão abrace mais o texto "Login". Obrigado.
Imran NZ
1
Esse já é o preenchimento interno do botão. Você pode precisar verificar se adicionou linhas como android:paddingou android:layout_margin"nas visualizações pai de <shape />.
Neoh
0

Você pode usar o estilo Borderless em AppCompatButton como abaixo. Use também a cor de fundo de sua preferência.

Widget.AppCompat.Button.Borderless.Colored

Código do botão

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

Resultado:

insira a descrição da imagem aqui

Shihab Uddin
fonte