2011-08-17 13 views
8

Ho PreferenceScreen con alcuni PreferenceCheckBoxes. Voglio cambiare il testoColor e textSize per titolo e riassunto e le immagini per il CheckBox selezionato e deseleziona. Quindi sto usando android:layout per cambiare questo attributo.CheckBoxPreference con il proprio layout

mio ChceckBoxPreference:

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

Quando uso android:widgetLayout sembra strano. E questo è il mio 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>  

Titolo con id @+android:id/title e sommario con @+android:id/summary stanno mostrando valori corretti. Tuttavia la casella di controllo nonostante il valore predefinito e l'ID @+android:id/checkbox non funziona correttamente. Non sta mostrando il valore corretto e non posso cambiare il valore mantenuto nelle preferenze. Senza utilizzare alcun layout, posso modificare il valore della casella di controllo toccando l'intero CheckBoxPreference. Ma ora (con il mio layout) posso cambiare il valore della casella di controllo solo toccando questa casella di controllo. Come posso rendere il layout di CheckBoxPreference in modo corretto con tutte le funzionalità?

+2

Vedi http://stackoverflow.com/questions/3569412/customize-check-box-preference, impostare cliccabile e attivabile su false per la vostra casella – devisnik

+0

@devisnik la OP sta parlando di cambiare l'intero layout dietro la preferenza, la soluzione che hai indicato riguarda solo la casella di controllo –

+0

la risposta di devisnik dovrebbe essere quella corretta. Queste impostazioni sono necessarie per effettuare una modifica del valore di preferenza. – user1608385

risposta

24

Prova questa come 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

Fonte di questo frammento: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/layout/preference.xml (ovviamente la personalizzazione del colore aggiunto ashish) –

+0

@ashish È passato molto tempo da quando hai postato questa risposta, ma sono bloccato da qualche parte. Ricevo un errore nel mio xml che dice "Impossibile risolvere il simbolo @ + android: id/title". Potete aiutarmi a capire il motivo per lo stesso .. – Anjani

+0

trascorrere alcune ore per trovare questa risposta grazie mille. –

Problemi correlati