2011-08-17 14 views
8

Tengo PreferenceScreen con algunas PreferenceCheckBoxes. Quiero cambiar textColor y textSize por título y resumen, y las imágenes de CheckBox se verifican y desmarcan. Entonces estoy usando android:layout para cambiar estos atributos.CheckBoxPreference con diseño propio

Mi ChceckBoxPreference:

<CheckBoxPreference 
    android:layout="@layout/preference_checkbox" 
    android:key="temp" 
    android:title="@string/title" 
    android:summary="@string/summary" 
    android:defaultValue="true" 
/> 

Cuando uso android:widgetLayout se ve extraño. Y esta es mi preference_checkbox.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="10dp" 
> 
<TextView 
    android:id="@+android:id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/gray" 
    android:textSize="20sp"  
    /> 
<TextView 
    android:id="@+android:id/summary" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/gray" 
    android:textSize="14sp" 
    /> 
</LinearLayout> 
<CheckBox 
    android:id="@+android:id/checkbox" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="10dp" 
/> 
</RelativeLayout>  

título con id @+android:id/title y resumen con @+android:id/summary están mostrando valores correctos. Sin embargo, la casilla de verificación a pesar del valor predeterminado e id @+android:id/checkbox no funciona correctamente. No muestra el valor correcto y no puedo cambiar el valor guardado en las preferencias. Sin usar ningún diseño, puedo cambiar el valor de la casilla de verificación táctil en toda CheckBoxPreference. Pero ahora (con mi diseño) puedo cambiar el valor de la casilla solo tocando en esta casilla de verificación. ¿Cómo puedo hacer el diseño de CheckBoxPreference de manera adecuada con todas las funcionalidades?

+2

Ver http://stackoverflow.com/questions/3569412/customize-check-box-preference, establecer y hacer clic enfocable en false para su casilla – devisnik

+0

@devisnik la OP está hablando de cambiar todo el diseño detrás de la preferencia, la solución que señaló solo se trata de la casilla –

+0

La respuesta de devisnik debe ser la correcta. Esos ajustes son necesarios para efectuar un cambio en el valor de preferencia. – user1608385

Respuesta

24

probar este como preference_checkbox.xml

<?xml version="1.0" encoding="utf-8"?> 
<!-- Copyright (C) 2006 The Android Open Source Project Licensed under the 
Apache License, Version 2.0 (the "License"); you may not use this file except 
in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
Unless required by applicable law or agreed to in writing, software distributed 
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
the specific language governing permissions and limitations under the License. --> 

<!-- Layout for a Preference in a PreferenceActivity. The Preference is able 
to place a specific widget for its particular type in the "widget_frame" 
layout. --> 
<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:paddingRight="?android:attr/scrollbarSize"> 

<RelativeLayout android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:layout_marginLeft="15dip" 
    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/textAppearanceLarge" 
     android:ellipsize="marquee" android:fadingEdge="horizontal" 
     android:textColor="#FF0000" /> 

    <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: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_vertical" android:orientation="vertical" /> 

</LinearLayout> 
+1

Fuente de este fragmento: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/layout/preference.xml (personalización de color agregada de ashish por supuesto) –

+0

@ashish Ha pasado mucho tiempo desde que publicaste esta respuesta, pero estoy atascado en alguna parte. Recibo un error en mi xml que dice "No se puede resolver symbol @ + android: id/title". ¿Me puede ayudar a averiguar la razón de la misma .. – Anjani

+0

pasar algunas horas para encontrar esta respuesta muchas gracias. –

Cuestiones relacionadas