安卓Selector失效、无用的解决方案

在开发安卓的时候经常会用到selector来为button自动设置背景,selector中有多种item,每个item可以定义一种状态,同时设置这种状态所要显示的图片。

但是在使用的selector中存在多种状态的时候,可能遇到满足这种状态但是图片“没有改变的情况”

比如这个selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/num_5" android:state_pressed="false" />
    <item android:drawable="@drawable/num_5_pressed" android:state_pressed="true" />
 <item android:drawable="@drawable/num_5_disable" android:state_enabled="false" />
</selector>

selector实现在三种对应状态下显示的内容。

在运行的时候,点击(state_pressed="true")和不点击(state_pressed="false")button时,button的背景都是没有问题的,在代码中设置button不可用(button.setEnable(false))却不能显示对应的图片@drawable/num_5_disable;

其实原因很简单,selector中的item判断是从上到下的。当为button等设置selector之后,button显示出来就处于未点击状态(state_pressed="false"),此时选择对应图片显示。当在代码中设置button不可用的时候,selector开始从上往下判断,首先遇到满足条件的是依然是未点击状态,也就依然选择了未点击状态的图片而停止继续判断。可以看到一个按钮要么点击要么未点击,永远也不可能显示不可用状态对应的图片。

这里如果要实现不可用状态对应图片的显示,就应当将第三个item前调,放在第一个位置:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/num_5_disable" android:state_enabled="false" />
    <item android:drawable="@drawable/num_5" android:state_pressed="false" />
    <item android:drawable="@drawable/num_5_pressed" android:state_pressed="true" />
</selector>
这样就可以显示上面所有的状态了。其他情况一样,调整对应item的顺序就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值