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.


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>

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"

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


1

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

 android:paddingTop="2dp"
 android:paddingBottom="2dp"

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.