android問題之Button自定義樣式selector後,點選無效果

一個放浪的程式設計師發表於2017-03-28

問題:
自定義了一個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 作為背景色放在第一位時,被匹配到了,所以不會再往下匹配。

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

相關文章