📅  最后修改于: 2023-12-03 14:39:11.809000             🧑  作者: Mango
Android中提供了自带的复选框控件CheckBox,但是我们有时候需要自定义复选框的样式,以满足我们的需求。本文将介绍如何在Android中自定义复选框。
我们可以使用自定义图片来替代默认的CheckBox样式。步骤如下:
1)首先,准备两张图片,一张表示未选中的状态,一张表示选中的状态。
2)在res/drawable目录下创建一个XML文件,命名为checkbox_style.xml,文件内容如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/checkbox_off" android:state_checked="false" />
<item android:drawable="@drawable/checkbox_on" android:state_checked="true" />
</selector>
其中,@drawable/checkbox_off和@drawable/checkbox_on分别表示未选中和选中的状态的图片。
3)在布局文件中使用CheckBox控件,并将android:button属性设置为刚才创建的XML文件名:
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是自定义复选框"
android:button="@drawable/checkbox_style" />
这样就完成了自定义复选框的样式。
我们也可以使用自定义View来实现复选框的效果。步骤如下:
1)创建一个自定义View,继承自View或者CheckBox控件:
public class MyCheckBox extends View {
private Paint mPaint;
private boolean mChecked = false;
public MyCheckBox(Context context) {
super(context);
init();
}
public MyCheckBox(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
}
public void setChecked(boolean checked) {
mChecked = checked;
invalidate();//重新绘制View
}
public boolean isChecked() {
return mChecked;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
int cx = width / 2;
int cy = height / 2;
int radius = Math.min(cx, cy);
mPaint.setColor(Color.WHITE);
mPaint.setStyle(Paint.Style.FILL);
canvas.drawCircle(cx, cy, radius, mPaint);
if (mChecked) {
mPaint.setColor(Color.GREEN);
canvas.drawCircle(cx, cy, radius * 0.6f, mPaint);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(Math.min(width, height), Math.min(width, height));
}
}
上面的代码中,我们重写了onDraw方法,在里面绘制了一个圆圈和一个选中状态的小圆圈。
2)在布局文件中使用刚才创建的自定义View:
<com.example.myapplication.MyCheckBox
android:id="@+id/my_checkbox"
android:layout_width="80dp"
android:layout_height="80dp"
android:clickable="true" />
在Activity中,我们可以通过setOnClickListener方法来监听自定义View的点击事件:
myCheckBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (myCheckBox.isChecked()) {
myCheckBox.setChecked(false);
} else {
myCheckBox.setChecked(true);
}
}
});
这样就完成了自定义View实现复选框的样式。
本文介绍了两种实现自定义复选框的方法,一是使用自定义图片,二是使用自定义View。对于简单的样式,我们可以选择第一种方法,对于复杂的样式,我们可以选择第二种方法。