Android-->如何让普通View具有checked属性(背景xml支持checked状态)

当需要实现选择状态的时候,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 欢迎您的加入.

你可能感兴趣的:(Android)