Ich verwende ListView und für jede Zeile habe ich row_item.xml und ich blase das im Code auf
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<CheckBox
Android:id="@+id/chk"
Android:layout_alignParentLeft="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<TextView
Android:id="@+id/txtChoice"
Android:textColor="#FF0000"
Android:text="TEST"
Android:layout_toRightOf="@id/chk"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" />
</RelativeLayout>
Wie kann ich das Kontrollkästchen ändern? Verwenden Sie ein anderes Bild "custom_1", wenn es markiert ist, und ein anderes Bild "custom_2", wenn es deaktiviert ist.
Drawable customdrawablecheckbox.xml :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_checked="false" Android:drawable="@drawable/unchecked_drawable" />
<item Android:state_checked="true" Android:drawable="@drawable/checked_drawable" />
<item Android:drawable="@drawable/unchecked_drawable" /> <!-- default state -->
</selector>
yourcheckbox xml:
<CheckBox
Android:id="@+id/chk"
Android:button="@drawable/customdrawablecheckbox"
Android:layout_alignParentLeft="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
checkbox ist eine Schaltfläche, mit der Sie Ihren eigenen Drawable-Status und den Checkbox-Hintergrund als Kontrollkästchen festlegen können. Zum Beispiel
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_checked="false" Android:drawable="@drawable/yourdrawable1" />
<item Android:state_checked="true" Android:drawable="@drawable/yourdrawable2" />
<item Android:drawable="@drawable/yourdrawable1" /> <!-- default -->
</selector>
und legen Sie dies in einer Datei file.xml in Ihrem Zeichenordner ab. In Ihrer Checkbox:
<CheckBox
Android:button="@drawable/file"
Android:id="@+id/chk"
Android:layout_alignParentLeft="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
Es ist ziemlich einfach :) Zuerst müssen Sie eine CustomCheckBox-Klasse erstellen, die CheckBox erweitert und die onDraw(Canvas canvas)
-Methode überschreibt:
public class CustomCheckBox extends CheckBox {
private final Drawable buttonDrawable;
public CustomCheckBox(Context context, AttributeSet set) {
super(context, set);
buttonDrawable = getResources().getDrawable(R.drawable.custom_check_box);
try {
setButtonDrawable(Android.R.color.transparent);
} catch (Exception e) {
// DO NOTHING
}
setPadding(10, 5, 50, 5);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
buttonDrawable.setState(getDrawableState());
final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
final int height = buttonDrawable.getIntrinsicHeight();
if (buttonDrawable != null) {
int y = 0;
switch (verticalGravity) {
case Gravity.BOTTOM:
y = getHeight() - height;
break;
case Gravity.CENTER_VERTICAL:
y = (getHeight() - height) / 2;
break;
}
int buttonWidth = buttonDrawable.getIntrinsicWidth();
int buttonLeft = getWidth() - buttonWidth - 5;
buttonDrawable.setBounds(buttonLeft, y, buttonLeft + buttonWidth, y + height);
buttonDrawable.draw(canvas);
}
}
}
Erstellen Sie auch Ihren Selektor mit dem Namen custom_check_box
in Ihrem Zeichenordner:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_checked="true" Android:state_window_focused="false"
Android:drawable="@drawable/btn_check_on" />
<item Android:state_checked="false" Android:state_window_focused="false"
Android:drawable="@drawable/btn_check_off" />
<item Android:state_checked="true" Android:state_pressed="true"
Android:drawable="@drawable/btn_check_on" />
<item Android:state_checked="false" Android:state_focused="true"
Android:drawable="@drawable/btn_check_off" />
<item Android:state_checked="false" Android:drawable="@drawable/btn_check_off" />
<item Android:state_checked="true" Android:drawable="@drawable/btn_check_on" />
</selector>
Und verwenden Sie Ihre benutzerdefinierten Symbole/Imgs im obigen XML für alle drei Status (fokussiert/gedrückt/Standard).
Verwenden Sie die benutzerdefinierte Komponente in Ihrem XML folgendermaßen:
<*package + class path*.CustomCheckBox // example com.mypackage.ui.CustomCheckBox if your project is named "mypackage" and the class is in the "ui" folder
Android:text="@string/text"
Android:checked="false" Android:layout_width="fill_parent"
Android:id="@+id/myCheckbox" Android:layout_height="wrap_content"/>
und Java:
private CustomCheckBox mCheckbox;
mCheckbox = (CustomCheckBox) findviewbyid(R.id.myCheckbox);
Es funktioniert, weil ich es in beide Richtungen verwendet habe :) Und mit einigen Optimierungen funktioniert es auch für RadioButtons auf dieselbe Weise. Viel Spaß beim Codieren!
Sie können den Selector in xml verwenden, der verwendet wird, um das Bild des Kontrollkästchens dynamisch entsprechend seinem aktivierten Status zu ändern.
Zum Beispiel:
<item Android:drawable="@drawable/ic_linkedin" Android:state_checked="true" />
<item Android:drawable="@drawable/ic_linkedin_disabled" Android:state_checked="false" />
Wenn in der folgenden Datei das Kontrollkästchen aktiviert ist, wird das Symbol ic_linkedin gesetzt. Wenn das Kontrollkästchen deaktiviert ist, wird das Symbol ic_linkedin_disabled gesetzt.