276 votes

Android - Espacement entre CheckBox et le texte

Existe-t-il un moyen simple d'ajouter un remplissage entre la case à cocher d'un contrôle CheckBox et le texte associé?

Je ne peux pas simplement ajouter des espaces de premier plan, car mon étiquette est multi-lignes.

En l'état, le texte est trop proche de la case à cocher: texte alt

345voto

DougW Points 9027

J'ai hate de répondre à ma propre question, mais dans ce cas je pense que j'en ai besoin. Après vérification, @Falmarri était sur la bonne voie avec sa réponse. Le problème est que Android Case de contrôle utilise déjà de l'android:paddingLeft propriété pour obtenir le texte où il est.

La ligne rouge indique le paddingLeft valeur de décalage de l'ensemble de la Case

alt text

Si je viens de remplacer le rembourrage dans mon XML de mise en page, il bousille la mise en page. Voici ce paramètre paddingLeft="0":

alt text

S'avère que vous ne pouvez pas résoudre ce problème dans XML. Vous devez le faire dans le code. Voici mon extrait avec une codé en dur rembourrage augmentation de 10dp.

final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
        checkBox.getPaddingTop(),
        checkBox.getPaddingRight(),
        checkBox.getPaddingBottom());

Cela vous donne la commande suivante, où la ligne verte est la hausse de la marge. C'est plus sûr que de le coder en dur une valeur, depuis différents périphériques peuvent utiliser différents un drawable pour la case à cocher.

alt text

Mise à JOUR - Comme les gens l'ont récemment mentionné dans les réponses ci-dessous, ce comportement a changé apparemment en Jelly Bean (4.2). Votre application sera nécessaire de vérifier la version de son fonctionnement, et l'utilisation de la méthode appropriée.

145voto

htafoya Points 3207

Étant donné la réponse de @DougW, ce que je fais pour gérer la version est plus simple, j'ajoute à ma vue checkbox:

 android:paddingLeft="@dimen/padding_checkbox"
 

où le dimen se trouve dans deux dossiers de valeurs:

valeurs

 <resources>

    <dimen name="padding_checkbox">25dp</dimen>

</resources>
 

values-v17 (4.2 JellyBean)

 <resources>

    <dimen name="padding_checkbox">10dp</dimen>

</resources>
 

J'ai un contrôle personnalisé, utilisez le dps à votre meilleur choix.

76voto

Roman Trokhymets Points 371

Utilisez l'attribut android:drawableLeft au lieu de android:button . Pour définir le remplissage entre le dessin et le texte, utilisez android:drawablePadding . Pour positionner l’usage à utiliser android:paddingLeft .

 <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@null"
        android:drawableLeft="@drawable/check_selector"
        android:drawablePadding="-50dp"
        android:paddingLeft="40dp"
        />
 

résultat

34voto

kotucz Points 301

Android 4.2 Jelly Bean (API 17) met le texte paddingLeft de la buttonDrawable (ints bord droit). Il travaille également pour le mode RTL.

Avant 4.2 paddingLeft était ignorant la buttonDrawable - elle a été prise à partir du bord gauche de la CompoundButton vue.

Vous pouvez le résoudre via XML - set paddingLeft à buttonDrawable.largeur + requiredSpace sur les anciens androïdes. Mis à requiredSpace uniquement sur les API 17. Par exemple utiliser la dimension ressources et les remplacer par les valeurs-v17 dossier de ressources.

Le changement a été introduit via android.widget de.CompoundButton.getCompoundPaddingLeft();

31voto

Falmarri Points 20281

Oui, vous pouvez ajouter un remplissage en ajoutant un remplissage.

android:padding=5dp

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X