2012-02-16 5 views

Respuesta

33

Finalmente, encontré la solución para esto.

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

Puede establecer el relleno utilizando: setPadding();

+0

hey @jclova, estoy enfrentando el mismo problema que urs. Aquí está el enlace: http://stackoverflow.com/questions/18509369/android-how-to-get-remove-margin-padding-in-preference-screen/18509566?noredirect=1#18509566 Acutally I no estoy creando ningún diseño personalizado para la pantalla de preferencias. Simplemente tiene una preferencia de casilla de verificación en el diseño, aunque establece cualquier margen a la izquierda. ¿Tiene alguna idea de dónde estoy yendo mal, por favor ayuda? – Dory

+1

Tenga en cuenta que las cantidades de relleno están en Px. Probablemente desee convertirlos de dp a px antes de configurar –

+0

Cualquier forma de anular esto en xml. – lostintranslation

10

Solo una adición a esto; la respuesta aceptada no funcionó porque el ListView no tiene ningún conjunto de relleno, se establece en la vista principal (generalmente un LinearLayout). Así que en vez, la siguiente era necesario:

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

¿No sería mejor agregar 'lv.setPadding (0, 0, 0, 0);'? Para mí, la respuesta de @jclova funciona, pero estableceré tanto el relleno de 'lv' como' lv.getParent() 'para tratar con los dispositivos no probados. Gracias. – Weekend

2

Esto es lo que hago en la anulación 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

Esto está funcionando perfectamente para mí. Incluso Android: icon = "@ null" no estaba haciendo ningún cambio pero tu solución funciona. Muchas gracias por la gran solución. Creo que esta debería ser una respuesta aceptada. – Smeet

+0

@Smeet ¡Me alegra que te haya ayudado! –

6

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

Asegúrese de llamarlo después de que su punto de vista ha sido creado (no onCreate).

Tenga en cuenta que el int que pasa está en pixels, no en dp. Para convertir desde dp to pixels ver this answer.

+1

Esta es la única respuesta que funcionó para mí. Invoqué esto en mi método 'onCreate()' de 'PreferenceActivity'. – Maurizio

1

Hay solución más elegante, al menos por PreferenceFragmentCompat, para definir el relleno en un tema. Asumamos que tenemos nuestra actividad establece un androide: theme = "@ estilo/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

Confirmé esto funciona. Probado en API 23. – Arst

0

Al hacer la actividad preferencia con un fragmento, aquí está la solución que he usado:

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

}

Cuestiones relacionadas