android selector中使用state_checked

项目中很多需求需要根据view不同状态现实不同的前景或背景颜色,一般都使用selector的XML将业务和UI效果隔离。
但是如果view的UI效果是check性质的(开和关状态UI效果不同),则使用selector的XML描述将不起作用,必须手写控制代码来切换UI效果。
例如:
setChecked(true);
setColor(#ffffff);


或者
setChecked(false);
setColor(#a7a7a6);


这样根据view状态显示UI效果的代码就分别存在业务代码 JAVA中和selector XML中,为了统一,集中存在selector XML中。
可以采用如下JAVA自定义代码:
public class CheckableTextView extends TextView implements Checkable {


	private boolean mChecked;
	
    private static final int[] CHECKED_STATE_SET = {
        android.R.attr.state_checked
    };
    
	public CheckableTextView(Context context) {
        super(context);
    }


    public CheckableTextView(Context context, AttributeSet attrs) {
    	super(context, attrs);
    }
    
    @Override
    protected int[] onCreateDrawableState(int extraSpace) {
        final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
        if (isChecked()) {
            mergeDrawableStates(drawableState, CHECKED_STATE_SET);
        }
        return drawableState;
    }


	@Override
	public boolean isChecked() {
		return mChecked;
	}


	@Override
	public void setChecked(boolean arg0) {
		mChecked = arg0;
		refreshDrawableState();
	}


	@Override
	public void toggle() {
		mChecked = !mChecked;
	}
}




onCreateDrawableState函数将state_checked属性加入到view的状态列表中,这样就可以在selector设置了。


selector XML和普通的一样
<selector xmlns:android="http://schemas.android.com/apk/res/android">


    <item android:color="#ffffff" android:state_checked="true"/>
    <item android:color="#a7a7a6" android:state_checked="false"/>


</selector>




layout XML使用也和标准用法没有区别
   	<com.xxx.CheckableTextView android:id="@+id/index" 
  		android:layout_width="fill_parent"
  		android:layout_height="fill_parent"
  		android:textColor="@color/lottery_team_selector"
		/>




JAVA代码中只需要简单setChecked调用就实现了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值