Est-il possible d'ajouter un peu d'espace entre un bouton radio et l'étiquette tout en utilisant les composants intégrés d'Android? Par défaut, le texte est un peu plissé.
<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 tout entier (bouton et texte ensemble). Cela a du sens, mais ne fait pas ce dont j'ai besoin.
Créer un dessin personnalisable via XML en spécifiant des images pour les états coché et non coché, 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 idéal)
Ajoutez des espaces supplémentaires au début de chaque étiquette. Android semble couper un caractère d'espacement, comme dans "My String", mais spécifier unicode U + 00A0, comme dans "\ u00A0My String" fait l'affaire. Cela fonctionne, mais cela semble un peu sale.
Des solutions meilleures?
Pour tous ceux qui lisent ceci maintenant. La réponse acceptée conduira à des problèmes de mise en page sur les nouveaux API, causant trop de bourrage.
Sur l'API <= 16, vous pouvez définir le remplissage à gauche du bouton radio pour définir le remplissage par rapport aux limites de vue du bouton. De plus, un arrière-plan de neuf correctifs modifie également les limites de la vue par rapport à la vue.
Sur l'API 17, le remplissage à gauche est associé au bouton radio que vous pouvez dessiner. Il en va de même pour le patch neuf environ. Pour mieux illustrer les différences de remplissage, voir la capture d'écran ci-jointe.
Si vous creusez dans le code, vous trouverez une nouvelle méthode dans api 17 appelée getHorizontalOffsetForDrawables . Cette méthode est appelée lors du calcul du remplissage à gauche d'un bouton radio (d'où l'espace supplémentaire illustré dans l'image).
TL; DR Vous devriez avoir le style de bouton radio pour le sdk min que vous supportez et un autre style pour api 17+
Vous ne savez 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
j'ai essayé plusieurs manières et j'ai fini avec celui-ci fonctionnant correctement sur l'émulateur et les périphériques:
<RadioButton
Android:background="@Android:color/transparent"
Android:button="@null"
Android:drawableLeft="@drawable/your_own_selector"
Android:drawablePadding="@dimen/your_spacing" />
Ajouter margin between radiobutton its label by paddingLeft :
Android:paddingLeft="10dip"
Il suffit de définir votre padding .
La 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é
Utilisez les attributs XML suivants. Ça a fonctionné pour moi
Pour API <= 16, utilisez
Android:paddingLeft="16dp"
Pour API> = 17 utilisation
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" />
De plus, l'attribut drawablePadding
ne fonctionne pas. Cela ne fonctionne que si vous avez ajouté un dessin 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" />
Vous ne pouvez pas essayer ceci maintenant pour vérifier, mais avez-vous essayé de voir si l'attribut Android: drawablePadding fait ce qu'il vous faut?
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
checkBox.getPaddingTop(),
checkBox.getPaddingRight(),
checkBox.getPaddingBottom());
Le remplissage entre les tirables et le texte. Cela sera réalisé en ajoutant la ligne ci-dessous dans le fichier xml . Android:drawablePadding="@dimen/10dp"
Créez un style dans style.xml comme ceci
<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 sous la forme d'un bouton, car RadioButton hérite indirectement du bouton.
"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.
Utiliser la gravité
Android:gravity="center_horizontal|center_vertical"
Je suis venu ici à la recherche d'une réponse et la manière la plus simple (après réflexion) consistait à ajouter un espacement au début de l'étiquette elle-même, comme
<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" />
pour moi ça marche:
<?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>
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);
<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" />
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ême droite. Découvrez la première radio de l'image.
J'ai essayé, "Android: paddingLeft" va fonctionner. paddingLeft aura uniquement un impact sur le texte tout en conservant l'image radio restée à sa position d'origine.