2010-08-25 3 views
14

Ich kann mein Kontrollkästchen nicht anpassen, obwohl ich den Hintergrund in der XML-Einstellungsdatei definiert haben, zieht es nicht die Datei. 1. Ich versuche, benutzerdefinierte Bilder für Kontrollkästchen angezeigt werden und haben die Wähler xml als „android_button.xml“ definiert, die wie folgt aussieht:anpassen Kontrollkästchen Präferenz

<?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 und android_pressed sind zwei .png Bilder in res> ziehbar Ordner.

2.my Checkbox preference.xml Datei ist:

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

Gibt es einen Fehler in der Definition, die einzige Änderung, die in Bildschirm erscheint ist der Androide: Titeltext, wenn ich den Text zu ändern, Es ändert den Text. Nichts anderes ändert sich. Wie behebe ich das? Danke für deinen Vorschlag.

Antwort

42

Es gibt zwei Möglichkeiten zu erreichen, was Sie benötigen, erste benutzerdefinierte Checkbox Layout custom_chexbox.xml bei Res definieren/Layout:

<?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"/> 

Dann brauchen Sie dieses Layout für die Präferenz angeben:

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

Die zweite Möglichkeit besteht darin, ein benutzerdefiniertes Design zu erstellen, Stile für Checkbox-Ansichten neu zu definieren und das Design auf die Einstellungen anzuwenden, siehe How to customize the color of the CheckMark color in android in a dialog. : android für Details.

+1

kranke Ebene, hatte keine Ahnung von Android: widgetLayout, wünschte, jede andere Komponente hatte das. – Gubatron

+0

Mann, das ist perfekt. – zenperttu

+0

Das funktioniert perfekt man. Du bist ein Lebensretter. Ich wusste nie, dass wir auch ein benutzerdefiniertes Layout für Widgets verwenden können. Danke vielmals. –

0

Machen Sie eine drwable XML-Datei:

<?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 es programmatisch von cb.setButtonDrawable (R.drawable.checkboxcustom);