android问题之Button自定义样式selector后,点击无效果

问题:
自定义了一个button样式,如下,正常颜色为红色,按下为蓝色,但是点击无变色效果,一直为红色。


<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>

解决:
将不带状态的样式放在最后,即可解决问题。


<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 作为背景色放在第一位时,被匹配到了,所以不会再往下匹配。

参考:http://www.jianshu.com/p/939a6d5760d8

你可能感兴趣的:(android问题集锦)