2010-08-25 12 views
14

Non riesco a personalizzare la casella di controllo, anche se ho definito lo sfondo nel file delle preferenze xml, non viene estratto il file. 1. Sto cercando di visualizzare le immagini personalizzate per casella di controllo e hanno definito il xml di selezione come "android_button.xml", che si presenta come:personalizza la casella di controllo preferenza

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_checkable="true" 
     android:drawable="@drawable/state_normal" /> <!-- pressed --> 
<item android:state_checked="true" 
     android:drawable="@drawable/android_pressed" /> <!-- focused --> 
<item android:drawable="@drawable/state_normal" /> <!-- default --> 
</selector> 

state_normal e android_pressed sono due immagini .png nella res> cartella drawable.

2.my file di Casella preference.xml è:

  <CheckBoxPreference android:key="@string/Drop_Option" 
      android:title="Close after call drop" 
      android:defaultValue="true" 
      android:background="@drawable/android_button" 
      /> 

c'è qualche errore nella definizione, l'unico cambiamento che si presenta a schermo è l'androide: testo del titolo, se cambio il testo, cambia il testo. Nient'altro cambia. Come posso risolvere questo problema. Grazie per il tuo suggerimento.

risposta

42

Ci sono due modi per ottenere ciò che è necessario, in primo luogo è quello di definire il layout personalizzato casella custom_chexbox.xml alla res/layout di:

<?xml version="1.0" encoding="UTF-8"?> 
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+android:id/checkbox" android:layout_width="wrap_content" 
android:layout_height="wrap_content" android:focusable="false" 
android:clickable="false" android:button="@drawable/android_button"/> 

allora avete bisogno di specificare questo layout per la preferenza:

<CheckBoxPreference android:key="@string/Drop_Option" 
android:title="Close after call drop" android:defaultValue="true" 
android:widgetLayout="@layout/custom_checkbox"/> 

Il secondo modo è quello di creare un tema personalizzato, ridefinire lo stile per le viste checkbox e applicare il tema all'attività delle preferenze, vedere How to customize the color of the CheckMark color in android in a dialog. : android per i dettagli.

+1

livello malato, non aveva idea di Android: widgetLayout, vorrei che ogni altro componente avesse quello. – Gubatron

+0

amico, questo è perfetto. – zenperttu

+0

Questo funziona perfettamente l'uomo. Sei un risparmiatore di vita. Non ho mai saputo che possiamo usare il layout personalizzato anche per i widget. Molte grazie. –

0

Effettuare uno drwable file xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/checkbox_active_btn" android:state_checked="true"></item> 
    <item android:drawable="@drawable/checkbox_active_btn" android:state_checked="true" android:state_enabled="false" android:state_focused="true"></item> 
    <item android:drawable="@drawable/checkbox_active_btn" android:state_checked="true" android:state_enabled="false"></item> 
    <item android:drawable="@drawable/checkbox_active_btn" android:state_checked="true" android:state_focused="true"></item> 
    <item android:drawable="@drawable/checkbox_active_btn" android:state_checked="true" android:state_pressed="true"></item> 
    <item android:drawable="@drawable/checkbox_inactive_btn" android:state_checked="false"></item> 
    <item android:drawable="@drawable/checkbox_inactive_btn" android:state_checked="false" android:state_enabled="false" android:state_focused="true"></item> 
    <item android:drawable="@drawable/checkbox_inactive_btn" android:state_checked="false" android:state_enabled="false"></item> 
    <item android:drawable="@drawable/checkbox_inactive_btn" android:state_checked="false" android:state_focused="true"></item> 
    <item android:drawable="@drawable/checkbox_inactive_btn" android:state_checked="false" android:state_pressed="true"></item> 

</selector> 

Set programatically da cb.setButtonDrawable (R.drawable.checkboxcustom);

Problemi correlati