wake-up-neo.net

Mehr Spielraum zwischen einem RadioButton und seinem Label in Android?

Ist es möglich, ein wenig Platz zwischen einem RadioButton und dem Label hinzuzufügen, während die integrierten Komponenten von Android verwendet werden? Standardmäßig wirkt der Text ein wenig verschmiert.

<RadioButton Android:id="@+id/rb1"
    Android:layout_width="fill_parent" 
    Android:layout_height="wrap_content"
    Android:text="My Text"/>

Ich habe ein paar Dinge ausprobiert:

  1. Die Angabe des Randes und des Abstandes scheint Platz um das gesamte Element (Schaltfläche und Text zusammen) zu schaffen. Das macht Sinn, tut aber nicht das, was ich brauche.

  2. Erstellen eines benutzerdefinierten Zeichnungsprogramms über XML, das Bilder für den geprüften und nicht geprüften Status angibt, und dann ein paar zusätzliche Pixel auf der rechten Seite jedes Bildes hinzufügen. Dies sollte funktionieren, aber Sie verlassen jetzt die Standardbenutzeroberfläche. (Nicht das Ende der Welt, aber nicht ideal)

  3. Fügen Sie am Anfang jedes Etiketts zusätzliche Leerzeichen hinzu. Android scheint ein führendes Leerzeichen zu trimmen, wie in "Mein String", aber die Angabe des Unicode U + 00A0 wie in "\ u00A0My String" führt den Trick aus. Das funktioniert, aber es wirkt irgendwie schmutzig.

Irgendwelche besseren Lösungen?

69
allclaws

Für jeden, der das jetzt liest. Die akzeptierte Antwort führt bei neueren Apis zu einigen Layoutproblemen, die zu viel Polsterung verursachen. 

Bei API <= 16 können Sie die Auffüllung links neben dem Optionsfeld festlegen, um die Auffüllung relativ zu den Ansichtsgrenzen des Optionsfelds festzulegen. Zusätzlich ändert ein Patch-9-Hintergrund auch die Ansichtsgrenzen relativ zur Ansicht.

Bei API 17 ist die linke Polsterung in Bezug auf das Optionsfeld gezeichnet. Gleiches gilt für den etwa neun Patch. Um die Auffüllunterschiede besser zu veranschaulichen, sehen Sie den beigefügten Screenshot. 

Wenn Sie durch den Code graben, finden Sie in api 17 eine neue Methode namens getHorizontalOffsetForDrawables . Diese Methode wird bei der Berechnung der linken Auffüllung für ein Optionsfeld (daher der im Bild dargestellte zusätzliche Platz) aufgerufen.

TL; DR Sie sollten einen Radioknopfstil für die unterstützte Min-SDK und einen anderen Stil für API 17+ haben

combine screen shots showing left padding differences between api versions

98
Jim Baca

Nicht sicher, ob das Problem dadurch behoben wird. Sie haben jedoch die Eigenschaft "Padding left" von Radio Button mit einem Wert von 50 dip oder mehr ausprobiert

60
user438650

ich habe mehrere Möglichkeiten ausprobiert und diese Funktion auf Emulator und Geräten korrekt ausgeführt:

    <RadioButton
        Android:background="@Android:color/transparent"
        Android:button="@null"
        Android:drawableLeft="@drawable/your_own_selector"
        Android:drawablePadding="@dimen/your_spacing" />
  • Android: Hintergrund muss transparent sein, wie es auf api10 scheint, es gibt einen Hintergrund mit intrinsischen Füllungen (nicht mit anderen apis versucht, aber die Lösung funktioniert auch auf anderen)
  • Android: button muss null sein, da die Auffüllungen sonst nicht korrekt funktionieren
  • Android: drawableLeft muss anstelle von Android angegeben werden: Schaltfläche
  • Android: drawablePadding ist der Raum, der zwischen dem Zeichen und dem Text liegt
55
Gianluca P.

Fügen Sie margin zwischen einem radiobutton und seinem label von paddingLeft hinzu: 

Android:paddingLeft="10dip"

Legen Sie einfach Ihr benutzerdefiniertes padding fest.

Die XML-Eigenschaft von RadioButton.

<RadioButton
    Android:id="@+id/radHighest"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:button="@drawable/YourImageResource"
    Android:drawablePadding="50dp"
    Android:paddingLeft="10dip"
    Android:text="@string/txt_my_text"
    Android:textSize="12sp" />

Erledigt

28
Hiren Patel

Verwenden Sie die folgenden XML-Attribute. Es hat für mich funktioniert

Für API <= 16 verwenden

Android:paddingLeft="16dp"

Für API> = 17 verwenden

Android:paddingStart="@16dp"

Z.B:

<Android.support.v7.widget.AppCompatRadioButton
        Android:id="@+id/popularityRadioButton"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:checked="true"
        Android:paddingEnd="@dimen/radio_button_text"
        Android:paddingLeft="@dimen/radio_button_text"
        Android:paddingRight="@dimen/radio_button_text"
        Android:paddingStart="@dimen/radio_button_text"
        Android:text="Popularity"
        Android:textSize="@dimen/sort_dialog_text_size"
        Android:theme="@style/AppTheme.RadioButton" />

 enter image description here

Weiteres Mehr: drawablePadding Attribut funktioniert nicht. Dies funktioniert nur, wenn Sie in Ihrem Optionsfeld ein Zeichenelement hinzugefügt haben. Zum Beispiel:

<RadioButton
    Android:id="@+id/radioButton"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center_horizontal"
    Android:button="@null"
    Android:drawableEnd="@Android:drawable/btn_radio"
    Android:drawablePadding="56dp"
    Android:drawableRight="@Android:drawable/btn_radio"
    Android:text="New RadioButton" />
19
Srikar Reddy

Sie können dies jetzt nicht zur Überprüfung versuchen, aber haben Sie versucht zu sehen, ob das Attribut Android: drawablePadding was Sie benötigen?

5
Mark B
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),

    checkBox.getPaddingTop(),
    checkBox.getPaddingRight(),
    checkBox.getPaddingBottom());
4
Dilavar M

Die Auffüllung zwischen den Zeichenelementen und dem Text. Dies wird durch Hinzufügen einer Zeile in der XML-Datei ..__ erreicht. Android:drawablePadding="@dimen/10dp" 

1
Faakhir

Erstellen Sie einen Stil in style.xml wie folgt

<style name="Button.Radio">

    <item name="Android:paddingLeft">@dimen/spacing_large</item>
    <item name="Android:textSize">16sp</item>
</style>

Setzen Sie diesen Stil in das Optionsfeld

 <RadioButton
                Android:id="@+id/rb_guest_busy"
                Android:layout_width="match_parent"
                Android:layout_height="48dp"
                Android:text="@string/guest_is_waiting"
                Android:textSize="@dimen/font_size_3x_medium"
                Android:drawablePadding="@dimen/spacing_large"
                Android:textColor="@color/color_text_heading_dark"
                style="@style/Button.Radio"/>

Sie können jedes Attribut genauso wie die Schaltfläche ändern, da RadioButton die Schaltfläche indirekt erbt.

Das "Android: paddingLeft" scheint nur unter Android 4.2.2 korrekt zu funktionieren

ich habe fast alle Android-Versionen ausprobiert und funktioniert nur auf der Version 4.2.2.

0
Lowerland

Verwenden Sie die Schwerkraft 

            Android:gravity="center_horizontal|center_vertical"
0
Hossam Gamal

Ich kam hierher und suchte nach einer Antwort. Der einfachste Weg (nach einigem Nachdenken) war das Hinzufügen von Abständen am Anfang des Etiketts

<RadioGroup
     Android:orientation="horizontal"
     Android:layout_width="wrap_content"
     Android:layout_height="wrap_content"
     Android:layout_alignRight="@+id/btnChangeMode"
     Android:layout_marginTop="10dp"
     Android:layout_marginBottom="10dp"
     Android:layout_below="@+id/view3"
     Android:gravity="center|left"
     Android:id="@+id/ledRadioGroup">
<RadioButton
         Android:button="@drawable/custom_radio_button"
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:text=" On"
         Android:layout_marginRight="6dp"
         Android:id="@+id/ledon"
         Android:textColor="@color/white" />
<RadioButton
         Android:button="@drawable/custom_radio_button"
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:text=" Off"
         Android:layout_marginLeft="6dp"
         Android:id="@+id/ledoff"
         Android:textColor="@color/white" />
0
jtizzle

für mich arbeitet:

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
        <item Android:state_checked="true">
            <layer-list>
                <item Android:right="5dp">
                    <shape Android:paddingLeft="5dp" Android:shape="oval">
                     <size Android:width="20dp" Android:height="20dp" />
                     <solid Android:color="@color/blue" />
            </shape>
        </item>
    </layer-list>
</item>
<item Android:paddingLeft="5dp" Android:state_checked="false">
    <layer-list>
        <item Android:right="5dp">
            <shape Android:paddingLeft="5dp" Android:shape="oval">
                <size Android:width="20dp" Android:height="20dp" />
                <solid Android:color="@color/grey" />
                </shape>
            </item>
        </layer-list>
    </item>
</selector>
0
Vadim

Sie können diesen Code in Ihre XML-Datei einfügen

<RadioButton
Android:id="@+id/rButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:drawablePadding="50dp"
Android:paddingLeft="10dip"
Android:text="@string/your_text" />

oder verwenden Sie dies für die Aktivitätsklasse

radioButton.setPadding(12, 10, 0, 10);
<RadioButton
                Android:id="@+id/rb1"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="5dp"
                Android:background="@null"
                Android:paddingLeft="20dp"
                Android:text="1"
                Android:textColor="@color/text2"
                Android:textSize="16sp"
                Android:textStyle="bold" />
0
Dhaval Shingala

Sie können versuchen, das Gravitationsattribut des Optionsfelds zu verwenden.

<RadioButton
                        Android:id="@+id/rb_all"
                        Android:layout_width="match_parent"
                        Android:layout_height="wrap_content"
                        Android:checked="true"
                        Android:gravity="right|center_vertical"
                        Android:padding="@dimen/padding_30dp"
                        Android:text="@string/filter_inv_all"
                        Android:textColor="@color/black"
                        Android:textSize="@dimen/text_size_18" />

Dadurch wird der Text ganz rechts ausgerichtet. Schauen Sie sich das erste Radio im Bild an.

 enter image description here

0
Salil Kaul

Ich habe versucht, "Android: paddingLeft" funktioniert. paddingLeft wirkt sich nur auf den Text aus, während das Radiobild an der ursprünglichen Position bleibt.

0
David Guo