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

来源:互联网 发布:南京教育网络平台登录 编辑:程序博客网 时间:2024/06/06 03:55

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

0 0