93 votes

Android : Comment supprimer la marge/le bourrelet dans l'écran des préférences ?

Je suis confronté à un problème très étrange dans la conception de l'écran des préférences. Bien que je ne donne aucune marge dans la mise en page, il laisse un certain espace à gauche.

Comme vous pouvez le voir dans l'image ci-dessous : enter image description here

XML :

   <PreferenceScreen android:title="demo" >
       <CheckBoxPreference
           android:defaultValue="false"
            android:key="prefSync"`
            android:title="Auto Sync" />
    </PreferenceScreen>

Est-ce que je fais quelque chose de mal en ajoutant une case à cocher de préférence dans l'écran ?

1voto

s-hunter Points 131

Aucune des réponses ci-dessus n'a fonctionné, j'ai dû copier le fichier préférence créez un nouveau fichier de mise en page tel que custom_preference.xml, remplacez le contenu de la mise en page en définissant l'attribut visibilité du cadre de l'icône à GONE . Puis, dans le fichier pref.xml, définissez la mise en page de la préférence pour utiliser cette mise en page personnalisée.

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <android.support.v7.preference.EditTextPreference
        android:title="@string/pref_label"
        android:hint="@string/pref_hint"
        android:key="@string/pref_key"
        android:inputType="text"
        android:singleLine="true"
        android:layout="@layout/custom_preference_layout"
        />
</PreferenceScreen>

0voto

jayeffkay Points 466

Le "rembourrage" est initié dans PreferenceFrameLayout.java :

public PreferenceFrameLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    TypedArray a = context.obtainStyledAttributes(attrs,
            com.android.internal.R.styleable.PreferenceFrameLayout, defStyle, 0);

    float density = context.getResources().getDisplayMetrics().density;
    int defaultBorderTop = (int) (density * DEFAULT_BORDER_TOP + 0.5f);
    int defaultBottomPadding = (int) (density * DEFAULT_BORDER_BOTTOM + 0.5f);
    int defaultLeftPadding = (int) (density * DEFAULT_BORDER_LEFT + 0.5f);
    int defaultRightPadding = (int) (density * DEFAULT_BORDER_RIGHT + 0.5f);

    mBorderTop = a.getDimensionPixelSize(
            com.android.internal.R.styleable.PreferenceFrameLayout_borderTop,
            defaultBorderTop);
    mBorderBottom = a.getDimensionPixelSize(
            com.android.internal.R.styleable.PreferenceFrameLayout_borderBottom,
            defaultBottomPadding);
    mBorderLeft = a.getDimensionPixelSize(
            com.android.internal.R.styleable.PreferenceFrameLayout_borderLeft,
            defaultLeftPadding);
    mBorderRight = a.getDimensionPixelSize(
            com.android.internal.R.styleable.PreferenceFrameLayout_borderRight,
            defaultRightPadding);

    a.recycle();
}

Si vous savez comment remplacer les styles définis par Android, vous pouvez probablement résoudre ce problème. Ce n'est cependant pas très simple.

0voto

Bao Doan Points 126

J'essaie d'utiliser

android:icon="@null"

con CheckBoxPreference sous Android 4.4 mais je n'arrive pas à rembourrer à partir de la gauche. Je me suis arrangé pour utiliser une petite icône transparente et ajouter

android:icon="@drawable/transparent_icon" 

et cela semble fonctionner pour moi. J'espère que cela pourra vous aider. Merci.

0voto

Francesco Florio Points 789

Je ne sais pas si c'est trop tard pour une réponse mais aujourd'hui j'ai eu le même problème et rien de ces réponses ne m'a aidé.

J'ai donc utilisé cette solution :

Dans mon DisclaimerPreference que extends Preference Je ne suis pas d'accord avec le onBindView(View view) de cette manière :

    @Override protected void onBindView(View view) {
        super.onBindView(view);
        if(view instanceof ViewGroup){
            ViewGroup vg = (ViewGroup)view;
            View currView;
            for(int i=0; i<vg.getChildCount(); i++){
               currView = vg.getChildAt(i);
               if (currView instanceof RelativeLayout)
                   currView.setVisibility(View.GONE);
            }
         }
    }

La clé est de définir le RelativeLayout à l'intérieur de la vue principale comme GONE . Veuillez me faire savoir si quelque chose ne va pas :)

0voto

John Points 99

Apparemment, ajouter android:layout="@null" à votre préférence en xml ferait l'affaire. Mais par conséquent, cela augmentera aussi la taille des titres

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