问题:
自定义了一个button样式,如下,正常颜色为红色,按下为蓝色,但是点击无变色效果,一直为红色。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<corners android:radius="5dp"/>
<solid android:color="@color/colorAccent"/>
</shape>
</item>
<item android:state_pressed="true">
<shape>
<corners android:radius="5dp"/>
<solid android:color="@color/colorPrimaryDark"/>
</shape>
</item>
<item android:state_focused="true">
<shape>
<corners android:radius="5dp"/>
<solid android:color="@color/colorPrimaryDark"/>
</shape>
</item>
</selector>
解决:
将不带状态的样式放在最后,即可解决问题。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<corners android:radius="5dp"/>
<solid android:color="@color/colorPrimaryDark"/>
</shape>
</item>
<item android:state_focused="true">
<shape>
<corners android:radius="5dp"/>
<solid android:color="@color/colorPrimaryDark"/>
</shape>
</item>
<!--不带状态-->
<item>
<shape>
<corners android:radius="5dp"/>
<solid android:color="@color/colorAccent"/>
</shape>
</item>
</selector>
原因:
selector中 item 是有顺序,类似于if语句,从上往下,当已有匹配的条件时,将不会再往下匹配。
所以,当无状态的 item 作为背景色
放在第一位时,被匹配到了,所以不会再往下匹配。