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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zfan93/article/details/51258909

在开发安卓的时候经常会用到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的顺序就可以了。

猜你喜欢

转载自blog.csdn.net/zfan93/article/details/51258909