Wie reduziere ich den inneren Abstand um den Text innerhalb eines Android-Schaltflächenobjekts?

88

Beispielschaltflächen

Im Moment habe ich also eine Schaltfläche, die wie das erste Bild oben aussieht. Wie reduziere ich den Abstand um den Text innerhalb der Schaltfläche selbst (um mehr wie das zweite Bild auszusehen)?

Die Breite und Höhe des Layouts wird wie folgt festgelegt:

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

Die benutzerdefinierte Stilform hat Parameter "

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

Der Rest sind nur Farbattribute und Radienwerte.

Um es klar zu machen, möchte ich, dass der Rahmen der Schaltfläche den Text "Anmelden" näher umschließt.

Jede Hilfe und jedes Feedback wird sehr geschätzt. Vielen Dank.

Imran NZ
quelle
1
android: padding = "10dp reduzieren 10 dp auf 5dp
Raghunandan
Das bezieht sich auf die äußere Polsterung des Knopfes. Ich beziehe mich auf das interne Auffüllen von "login" und seinem Container. Trotzdem danke.
Imran NZ
Dies hat mir geholfen - stackoverflow.com/a/19227057/3325759 (author - @StinePike) Aus der Antwort - Addandroid:includeFontPadding="false"
Mikelis Kaneps
Das Überschreiben der Polsterung funktioniert bei mir. textView.setPadding (0,0,0,0);
M. Usman Khan
2
Geben Sie android: minHeight = "0dp" android: minWidth = "0dp" in die Schaltfläche ein. Dies sollte funktionieren ..
Viper

Antworten:

231

Es hat ewig gedauert, bis ich das gefunden habe, aber das "Auffüllen" um den Text in einer Schaltfläche ist überhaupt nicht wirklich Auffüllen. Der Standardstil Widget.Button enthält eine minHeight-Eigenschaft. Durch Ändern von minHeight auf der Schaltfläche können Sie die Polsterung wie erwartet anpassen.

<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
quelle
6
Ich hatte ein ähnliches Problem mit der Breite. Das Setzen von android: minWidth = "0dp" funktionierte, aber dann musste bei Schaltflächen mit langem Text android: paddingRight und android: paddingLeft eingestellt werden, um ein schlechtes Layout zu verhindern.
Simon Featherstone
Mein Widget.Button hat keine minHeight (sdk28)
oder
Die Eigenschaft befindet sich auf der Themenschaltfläche, nicht auf der übergeordneten Schaltfläche "Widget.Button". Wenn Sie ein anderes Thema als "Holo" verwenden, befindet es sich möglicherweise an einem anderen Ort. Hier sind die Stile für "holo" android.googlesource.com/platform/frameworks/base/+/master/core/…
Steven
3

Versuchen Sie dies in Ihrer benutzerdefinierten Datei 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">

Sie können auch die XML-Datei Ihrer Schaltfläche ändern

android:layout_width="wrap_content"
android:layout_height="wrap_content"
Qadir Hussain
quelle
2
Dies funktioniert überhaupt nicht, wenn Sie lesen, was die ursprüngliche Frage stellt
Jeremy
1

In der Materialkomponentenbibliothek MaterialButtonhat der einen Standardstil mit insetBottomund insetTopmit dem Wert von 6dp.

Sie können sie im Layout ändern:

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

oder in einem Stil:

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

Geben Sie hier die Bildbeschreibung einGeben Sie hier die Bildbeschreibung ein

Gabriele Mariotti
quelle
0

Wenn Sie eine kleinere obere und untere Polsterung wünschen, verwenden Sie diese:

 android:paddingTop="2dp"
 android:paddingBottom="2dp"
Neoh
quelle
Das ist für die Polsterung außerhalb des Knopfes. Der Effekt, den ich anstrebe, besteht darin, den Schaltflächenrahmen so zu gestalten, dass er den "Anmeldetext" näher umarmt. Vielen Dank.
Imran NZ
1
Das ist schon die innere Polsterung des Knopfes. Möglicherweise müssen Sie überprüfen, ob Sie Zeilen wie android:paddingoder android:layout_margin"in den übergeordneten Ansichten von hinzugefügt haben <shape />.
Neoh
0

Sie können mit Borderless Stil in AppCompatButton wie unten. Verwenden Sie auch die von Ihnen bevorzugte Hintergrundfarbe.

Widget.AppCompat.Button.Borderless.Colored

Schaltflächencode

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

Ausgabe:

Geben Sie hier die Bildbeschreibung ein

Shihab Uddin
quelle