如何更改CheckBox的默认图像

我正在使用ListView和每行我有row_item.xml,我在代码中充气

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

如何更改该checkbox使用另一个custom_1图像时被选中,而另一个custom_2图像时被选中?

可绘制的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是一个button,所以你可以提供你自己的可绘制的检查不检查状态,它作为checkbox的背景。 例如

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

并把它放在你的可绘制文件夹的file.xml中。 在您的checkbox中:

  <CheckBox android:button="@drawable/file" android:id="@+id/chk" android:layout_alignParentLeft="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

它非常容易:)首先,您需要创build一个CustomCheckBox类,它将扩展CheckBox并覆盖onDraw(Canvas canvas)方法:

 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); } } } 

在您的可绘制文件夹中创build一个名为custom_check_box的select器:

 <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> 

并在上面的XML使用您的自定义图标/ imgs所有三个状态(聚焦/按下/默认)

像这样在你的XML中使用自定义组件:

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

和java:

 private CustomCheckBox mCheckbox; mCheckbox = (CustomCheckBox) findviewbyid(R.id.myCheckbox); 

它的工作原理,因为我用它两种方式:)和一些调整它也适用于RadioButtons同样的方式。 快乐的编码!