Est-il possible d'ajouter un peu d'espace entre un RadioButton et l'étiquette tout en utilisant les composants intégrés d'Android? Par défaut, le texte semble un peu froissé.
<RadioButton android:id="@+id/rb1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="My Text"/>
J'ai essayé plusieurs choses:
La spécification de la marge et du remplissage semble ajouter de l'espace autour de l'élément entier (bouton et texte, ensemble). Cela a du sens, mais ne fait pas ce dont j'ai besoin.
Création d'un dessin personnalisé via XML en spécifiant des images pour les états cochés et non cochés, puis en ajoutant quelques pixels supplémentaires sur le côté droit de chaque image. Cela devrait fonctionner, mais maintenant vous sortez de l'interface utilisateur par défaut. (Pas la fin du monde, mais pas l'idéal)
Ajoutez des espaces supplémentaires au début de chaque étiquette. Android semble couper un caractère d'espace au début, comme dans "Ma chaîne", mais spécifier unicode U + 00A0, comme dans "\ u00A0My String" fait l'affaire. Cela fonctionne, mais cela semble un peu sale.
De meilleures solutions?
la source
Je ne sais pas si cela résoudra votre problème, mais avez-vous essayé la propriété "Padding left" de Radio Button avec une valeur de 50dip ou plus
la source
J'ai essayé plusieurs façons et j'ai terminé avec celle-ci fonctionnant correctement sur l'émulateur et les appareils:
<RadioButton android:background="@android:color/transparent" android:button="@null" android:drawableLeft="@drawable/your_own_selector" android:drawablePadding="@dimen/your_spacing" />
la source
Ajoutez une marge entre un bouton radio et son étiquette par paddingLeft :
android:paddingLeft="10dip"
Définissez simplement votre rembourrage personnalisé .
Propriété xml de 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" />
Terminé
la source
Utilisez les attributs XML suivants. Ça a marché pour moi
Pour API <= 16, utilisez
android:paddingLeft="16dp"
Pour API> = 17, utilisez
android:paddingStart="@16dp"
Par exemple:
<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" />
En outre, l'
drawablePadding
attribut ne fonctionne pas. Cela ne fonctionne que si vous avez ajouté un dessinable dans votre bouton radio. Par exemple:<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" />
la source
Vous ne pouvez pas essayer ceci pour le moment pour vérifier, mais avez-vous essayé de voir si l'attribut android: drawablePadding fait ce dont vous avez besoin?
la source
final float scale = this.getResources().getDisplayMetrics().density; checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f), checkBox.getPaddingTop(), checkBox.getPaddingRight(), checkBox.getPaddingBottom());
la source
Le remplissage entre les drawables et le texte. Il sera réalisé en ajoutant la ligne ci-dessous dans le fichier xml.
android:drawablePadding="@dimen/10dp"
la source
@dimen/10dp
bad practiceJ'ai essayé, "android: paddingLeft" fonctionnera. paddingLeft n'affectera que le texte tout en gardant l'image radio à sa position d'origine.
la source
Le "android: paddingLeft" ne semble fonctionner correctement que sous Android 4.2.2
J'ai essayé presque toutes les versions d'Android et cela ne fonctionne que sur la version 4.2.2.
la source
J'utilise une approche différente qui, à mon avis, devrait fonctionner sur toutes les versions d'API. Au lieu d'appliquer un remplissage, j'ajoute une vue vide entre les RadioButtons:
<View android:layout_width="20dp" android:layout_height="1dp" />
Cela devrait vous donner un rembourrage de 20dp.
la source
Je suis venu ici à la recherche d'une réponse et le moyen le plus simple (après réflexion) était d'ajouter un espacement au début de l'étiquette elle-même comme ceci
<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" />
la source
pour moi fonctionne:
<?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>
la source
<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" />
la source
Vous pouvez ce code sur votre fichier XML
<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" />
ou utilisez ceci sur la classe d'activité
radioButton.setPadding(12, 10, 0, 10);
la source
Créez un style dans style.xml comme celui-ci
<style name="Button.Radio"> <item name="android:paddingLeft">@dimen/spacing_large</item> <item name="android:textSize">16sp</item> </style>
Mettez ce style dans le bouton radio
<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"/>
Vous pouvez modifier n'importe quel attribut de la même manière que le bouton car RadioButton hérite indirectement du bouton.
la source
Je sais que c'est une vieille question, mais avec cette solution, j'ai enfin la tranquillité d'esprit et j'oublie le niveau d'API.
RadioGroup vertical côté gauche avec vue de texte verticale côté droit.
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical"> <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RadioGroup> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginLeft="8dp" android:gravity="center_vertical" android:text="Radio 1"/> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginLeft="8dp" android:gravity="center_vertical" android:text="Radio 2"/> </LinearLayout> </LinearLayout>
la source
Vous pouvez essayer d'utiliser l'attribut gravité du bouton radio.
<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" />
Cela alignera le texte à l'extrémité la plus à droite. Découvrez la première radio de l'image.
la source