Jak zmniejszyć wewnętrzne wypełnienie wokół tekstu w obiekcie przycisku systemu Android?

91

Przykładowe przyciski

Tak więc w tej chwili mam przycisk, który wygląda jak pierwszy obrazek powyżej. Jak zmniejszyć dopełnienie tekstu wewnątrz samego przycisku (aby wyglądać bardziej jak drugi obraz)?

Szerokość i wysokość układu są ustawione jako:

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

Kształt stylu niestandardowego ma parametry "

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

Reszta to tylko atrybuty kolorów i wartości promieni.

Aby było jasne, chcę, aby ramka przycisku obejmowała bliżej tekst „Login”.

Wszelka pomoc i opinie są bardzo mile widziane. Dzięki.

Imran NZ
źródło
1
android: padding = "10 dp zmniejsz 10 dp do 5 dp
Raghunandan
Odnosi się to do zewnętrznej wyściółki Button. Mam na myśli wewnętrzne wypełnienie pola „login” i jego kontener. W każdym razie dzięki.
Imran NZ
To mi pomogło - stackoverflow.com/a/19227057/3325759 (autor - @StinePike) From the answer - Addandroid:includeFontPadding="false"
Mikelis Kaneps
zastępowanie wypełnienia działa dla mnie. textView.setPadding (0,0,0,0);
M. Usman Khan
2
W przycisku wpisz android: minHeight = "0dp" android: minWidth = "0dp". To powinno działać ...
viper

Odpowiedzi:

234

Znalezienie tego zajęło mi wieczność, ale „dopełnienie” wokół tekstu na przycisku tak naprawdę wcale nie jest dopełnieniem. Domyślny styl Widget.Button zawiera właściwość minHeight. Zmiana minHeight na przycisku umożliwi dostosowanie wypełnienia zgodnie z oczekiwaniami.

<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
źródło
6
Miałem podobny problem z szerokością. Ustawienie android: minWidth = "0dp" działało, ale w przypadku przycisków z długim tekstem wymagałem ustawienia android: paddingRight i android: paddingLeft, aby zapobiec złemu układowi.
Simon Featherstone
My Widget.Button nie ma minHeight (sdk28)
ror
Właściwość znajduje się na przycisku motywu, a nie nadrzędnym „Widget.Button”. Jeśli używasz innego motywu niż „holo”, może on znajdować się w innym miejscu. Oto style dla „holo” android.googlesource.com/platform/frameworks/base/+/master/core/…
Steven
4

spróbuj tego w swoim niestandardowym pliku shape.xml

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

możesz również wprowadzić zmiany w pliku XML swojego przycisku

android:layout_width="wrap_content"
android:layout_height="wrap_content"
Qadir Hussain
źródło
2
To w ogóle nie działa, jeśli przeczytasz, o co chodzi w oryginalnym pytaniu
Jeremy
4

W Components Library materiału, MaterialButtonposiada domyślny styl z insetBottomi insetTopo wartości 6dp.

Możesz je zmienić w układzie:

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

lub w stylu:

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

wprowadź opis obrazu tutajwprowadź opis obrazu tutaj

Gabriele Mariotti
źródło
1

Jeśli chcesz mieć mniejszą górną i dolną wyściółkę, użyj tego:

 android:paddingTop="2dp"
 android:paddingBottom="2dp"
Neoh
źródło
To dotyczy wyściółki na zewnątrz przycisku. Efektem, którego szukam, jest zbliżenie ramki przycisku do tekstu „Login”. Dzięki.
Imran NZ
1
To już jest wewnętrzna wyściółka przycisku. Może być konieczne sprawdzenie, czy dodano linie, takie jak android:paddinglub android:layout_margin"w widokach nadrzędnych programu <shape />.
Neoh
0

Możesz użyć stylu bez obramowania w AppCompatButton, jak poniżej. Użyj również preferowanego koloru tła.

Widget.AppCompat.Button.Borderless.Colored

Kod przycisku

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

Wynik:

wprowadź opis obrazu tutaj

Shihab Uddin
źródło