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:
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.
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)
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?
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
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
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" />
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
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" />
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" />
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?
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
checkBox.getPaddingTop(),
checkBox.getPaddingRight(),
checkBox.getPaddingBottom());
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"
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.
Verwenden Sie die Schwerkraft
Android:gravity="center_horizontal|center_vertical"
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" />
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>
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" />
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.
Ich habe versucht, "Android: paddingLeft" funktioniert. paddingLeft wirkt sich nur auf den Text aus, während das Radiobild an der ursprünglichen Position bleibt.