2012-03-02 16 views
11

Antes de que me pidió que retire el relleno de la PreferenceActivity/PreferenceFragment:Android: Cómo ajustar Margen/Relleno en Preferencia?

Android: How to maximize PreferenceFragment width (or get rid of margin)?

Esta vez tiene problemas para adaptarse margen/acolchado antes de texto Título. (Ver imagen a continuación).

enter image description here

¿Alguien tiene alguna idea?

+0

hi @jclova, estoy frente con el mismo problema, y ​​no quiero pasar por el diseño personalizado para las casillas de verificación. ¿Cómo te deshiciste de este problema? – Dory

+0

Sospecho, lo que ves como el relleno del lado izquierdo es un "vacío" 'android: icon'. Debería proporcionar su propio dibujo con las dimensiones que desee y ver si ayuda. – Stan

Respuesta

9

Se puede personalizar la Casilla de selección que de esta manera: MyPreference.xml

<CheckBoxPreference android:key="testcheckbox" 
    android:title="Checkbox Title" 
    android:summary="Checkbox Summary..." 
    android:layout="@layout/custom_checkbox_preference_layout"> 
</CheckBoxPreference> 

y custom_checkbox_preference_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical" 
    android:paddingLeft="16dip" 
    android:paddingRight="?android:attr/scrollbarSize"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:minWidth="0dp" 
     android:gravity="center" 
     android:orientation="horizontal"> 
     <ImageView 
      android:id="@+android:id/icon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      /> 
    </LinearLayout> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="6dip" 
     android:layout_marginTop="6dip" 
     android:layout_marginBottom="6dip" 
     android:layout_weight="1"> 

     <TextView android:id="@+android:id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:ellipsize="marquee" 
      android:fadingEdge="horizontal" /> 

     <TextView android:id="@+android:id/summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@android:id/title" 
      android:layout_alignLeft="@android:id/title" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:textColor="?android:attr/textColorSecondary" 
      android:maxLines="4" /> 

    </RelativeLayout> 

    <!-- Preference should place its actual preference widget here. --> 
    <LinearLayout android:id="@+android:id/widget_frame" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical" /> 

</LinearLayout> 

el punto es androide: minWidth = "0DP".

+0

hola señor estoy usando diseño personalizado para CheckBoxPreference. pero mi problema es el diseño lineal con id "@ + android: id/widget_frame" está teniendo algo de relleno a la izquierda y a la derecha. cómo eliminarlo. Gracias de antemano. –

8

Para cualquier persona que enfrenta este problema y no quiere pasar por un diseño personalizado. Me gustaría señalar que agregar:

android:icon="@null" 

resolvió mi problema con el espacio vacío del lado izquierdo.

<PreferenceScreen android:icon="@null" android:title="Your title" android:summary="Your summary" /> 
0

El custom_checkbox_preference_layout.xml descrito por user1482130 trabajo también sin modificaciones para otros tipos de preferencias como el listpreferences! Muy útil

android:layout="@layout/custom_checkbox_preference_layout"> 
0

Si va a crear dinámicamente las preferencias pasar ContextThemeWrapper como un parámetro para el nuevo Preferencia

TypedValue themeTypedValue = new TypedValue(); 
getActivity().getTheme().resolveAttribute(R.attr.preferenceTheme, themeTypedValue, true); 
ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(getActivity(), themeTypedValue.resourceId); 
Preference preference = new Preference(contextThemeWrapper); 

lo he encontrado en este artículo: Dynamically creating Preference Screens on Android

Cuestiones relacionadas