当需要实现选择状态的时候,CompoundButton是系统提供的选择.
我们可以很简单的通过isChecked(), 返回是否选中.
也可以通过xml设置background的方法, 实现选中后的样式.
但是, 有些时候, 系统提供的控件不足以满足我们的需求,,,这个时候就是头脑风暴的时候了.
首先, 如果需要实现isChecked()返回是否选中, 那么自定义View的时候, 就需要自己通过一个变量
保存这个互斥状态值.
boolean mChecked = false;
这个通常是比较简单的.
难点:那么如何实现xml中的checked状态呢?
其实方法也很简单, 系统都处理好了, 只要我们调用就行.
//选中状态对应的系统资源
private static final int[] CHECKED_STATE_SET = {
android.R.attr.state_checked
};
//重写View的onCreateDrawableState方法, 这个方法就是告诉xml当前的状态
//然后,系统会通过此状态,设置对应的drawable
@Override
public int[] onCreateDrawableState(int extraSpace) {
//固定写法
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
//判断是否选择
if (isChecked()) {
//如果选择, 把选择的状态, 合并到现有的状态中.
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
}
public boolean isChecked() {
return mChecked;
}
//那么, 当设置选中状态的时候
public void setChecked(boolean checked) {
if (mChecked == checked) {
return;
}
//保存当前的选中状态
mChecked = checked;
//固定写法, 刷新drawable的状态
refreshDrawableState();
}
到这里, 你就可以显示一个和系统CompoundButton功能相同的控件了.
至此: 文章就结束了,如有疑问: QQ群:274306954 欢迎您的加入.