2012-02-16 12 views

risposta

33

Infine, ho trovato la soluzione a questo.

@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; 
} 

È possibile impostare padding utilizzando: setPadding();

+0

hey @jclova, sto affrontando lo stesso problema di urs. Ecco il link: http://stackoverflow.com/questions/18509369/android-how-to-get-remove-margin-padding-in-preference-screen/18509566?noredirect=1#18509566 Acutally I non sto creando alcun layout personalizzato per la schermata delle preferenze. Basta avere checkboxpreference nel layout, anche se sta impostando qualsiasi margine a sinistra. Hai idea di dove sto andando male, per favore aiutami. – Dory

+1

Ricordare che gli importi di padding sono in Px. Probabilmente vorrai convertirli da dp a px prima di impostare –

+0

Un modo per sovrascriverlo in xml. – lostintranslation

10

Solo un'aggiunta a questo; la risposta accettata non ha funzionato per me perché lo ListView stesso non ha alcun set di padding, è impostato sulla vista genitore (di solito un LinearLayout). Così, invece, il seguente è stato necessario:

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

Non sarebbe meglio aggiungere 'lv.setPadding (0, 0, 0, 0);'? Per me @ la risposta di jclova funziona, ma imposterò sia il padding di 'lv' che' lv.getParent() ', per gestire i dispositivi non testati. Grazie. – Weekend

2

Questo è quello che faccio nel l'override 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); 
+1

Funziona perfettamente per me. Persino Android: icon = "@ null" non ha apportato alcuna modifica, ma la soluzione funziona. Grazie mille per la grande soluzione. Penso che questa dovrebbe essere una risposta accettata. – Smeet

+0

@Smeet Sono contento che ti abbia aiutato! –

6

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

Assicurarsi di chiamare dopo il vostro punto di vista è stato creato (non onCreate).

Ricordare che il numero int in cui ci si trova è pixels, non dp. Per convertire da dp to pixels, vedere this answer.

+1

Questa è l'unica risposta che ha funzionato per me. L'ho invocato nel metodo 'onCreate()' di PreferenceActivity. – Maurizio

1

C'è soluzione più elegante, almeno per PreferenceFragmentCompat, per definire l'imbottitura in un tema. Supponiamo di avere la nostra attività ha stabilito un android: theme = "@ stile/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> 
+0

Ho confermato che funziona. Testato su API 23. – Arst

0

Quando si esegue l'attività preferenza con un frammento, ecco la soluzione che ho usato:

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); 
    } 
} 

}

Problemi correlati