Android: Comment maximiser la largeur PreferenceFragment (ou de se débarrasser de la marge)?

StackOverflow https://stackoverflow.com/questions/9314845

  •  26-10-2019
  •  | 
  •  

Question

Paramètres Android Capture d'écran

FragmentsBC Capture d'écran

Si vous regardez soit Android Paramètres capture d'écran ou FragmentsBC capture d'écran, il y a marge PreferenceFragment. Comment pouvez-vous vous en débarrasser?

J'ai essayé de faire la largeur PreferenceFragment à fill_parent, mais pas de chance.

Était-ce utile?

La solution

Enfin, j'ai trouvé la solution à ce sujet.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = super.onCreateView(inflater, container, savedInstanceState);
    if(v != null) {
        ListView lv = (ListView) v.findViewById(android.R.id.list);
        lv.setPadding(10, 10, 10, 10);
    }
    return v;
}

Vous pouvez définir le remplissage à l'aide: setPadding ();

Autres conseils

Juste un ajout à cela; la réponse acceptée ne fonctionne pas pour moi parce que le ListView lui-même n'a pas de jeu de remplissage, il est défini sur la vue parent (habituellement un LinearLayout). Ainsi, au lieu, ce qui suit est nécessaire:

ListView lv = (ListView) findViewById(android.R.id.list);
ViewGroup parent = (ViewGroup)lv.getParent();
parent.setPadding(0, 0, 0, 0);

getListView().setPadding(left, top, right, bottom)

Assurez-vous de l'appeler après votre point de vue a été créé (non onCreate).

Gardez à l'esprit que le int vous passez est pixels, pas dp. Pour convertir dp to pixels voir cette réponse .

est ce que je fais dans la commande prioritaire onResume:

    // Fix PreferenceFragment's padding...
    int paddingSize = 0;
    if (Build.VERSION.SDK_INT < 14)
    {
        paddingSize = (int) (-32 * CLS_Gfx.scale);
    }
    else
    {
        paddingSize = (int) (-16 * CLS_Gfx.scale);
    }

    final View v = getView();

    v.setPadding(paddingSize, 0, paddingSize, 0);

Il y a une solution plus élégante, au moins pour PreferenceFragmentCompat, pour définir le rembourrage dans un thème. Supposons que nous avons notre activitée un androïde: thème = "@ Style / PreferenceTheme"

   <style name="PreferenceTheme" parent="@style/Theme.AppCompat">
       <item name="preferenceTheme">@style/MyPreferenceThemeOverlay</item>
   </style>

   <style name="MyPreferenceThemeOverlay" parent="PreferenceThemeOverlay">
        <item name="preferenceFragmentListStyle">@style/MyPreferenceFragmentListStyle</item>
   </style>

   <style name="MyPreferenceFragmentListStyle" parent="@style/PreferenceFragmentList">
       <item name="android:paddingLeft">0dp</item>
       <item name="android:paddingRight">0dp</item>
   </style>

Une autre option est de définir votre propre adaptateur. De cette façon, vous avez plus de flexibilité et il est plus robuste contre les changements.

Voir cette autre réponse sur l'adaptateur en-tête personnalisé

Quand vous faites l'activité de préférence avec un fragment, voici la solution que je:

public class T2DPreferenceActivity extends PreferenceActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content,
            new T2DPreferenceFragment()).commit();
}

public static class T2DPreferenceFragment extends PreferenceFragment {
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.server_screen_preference);
    }

    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ListView lv = (ListView)view.findViewById(android.R.id.list);
        ViewGroup parent = (ViewGroup)lv.getParent();
        parent.setPadding(0, 100, 0, 0);
    }
}

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top