56

ボタンがあり、設定するときに背景を変えたい:

android:enabled="false"

背景のリソースファイルは次のとおりです。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false"
          android:drawable="@drawable/bttn_orange_normal" /> <!-- pressed -->
    <item android:state_pressed="true"
          android:drawable="@drawable/bttn_orange_selected" /> <!-- focused -->
    <item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>
    <item android:state_enabled="true" android:drawable="@drawable/bttn_orange_normal"/>
</selector>

ただし、ボタンを無効にしても、ボタンは通常の背景のままです。私は何が欠けていますか?

4

3 に答える 3

157

この行を入れてください:

<item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>

タグの最初のアイテムとして(最初のアイテムである必要があります。そうでない場合は機能しません) 。selector

最後の :

<selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>
            <item android:state_pressed="false"
              android:drawable="@drawable/bttn_orange_normal" /> <!-- pressed -->
            <item android:state_pressed="true"
              android:drawable="@drawable/bttn_orange_selected" /> <!-- focused -->
            <item android:state_enabled="true" android:drawable="@drawable/bttn_orange_normal"/> <!-- idle state -->
</selector>
于 2012-12-26T16:56:05.500 に答える
37

Vincent Ducastelの答えは正しいですが、ソリューションが機能する理由は説明されていません。

Androidは利用可能なアイテムのリストをトラバースするときに、リストを上から下にトラバースします。いずれの場合も、ビューの現在の状態が各アイテムに定義された状態と一致するかどうかを評価します。次に、条件に一致する最初のアイテムを選択し、残りを無視します。

これが、リストの一番下に常にデフォルトの項目を提供する必要がある理由であり、複雑な選択条件を表示する手段も提供します。たとえば、アイテムが無効になっているときに特別なプレス状態にしたい場合は、次のアイテムを定義します。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    ...
    <item android:state_enabled="false" android:state_pressed="false" android:drawable="@drawable/btn_grey_disabled"/>
    <item android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/btn_white_disabled_selected"/>
    ...
</selector>
于 2016-07-07T01:07:22.773 に答える
0

アクティブ、デフォルト、および無効状態の例を追加

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!--Disable-->
    <item android:drawable="@drawable/ic_button_disable"
        android:state_enabled="false" 
        android:state_pressed="false" />

    <item android:drawable="@drawable/ic_button_disable_touch" 
        android:state_enabled="false" 
        android:state_pressed="true" />


    <!--Default-->
    <item android:drawable="@drawable/ic_button_default"  
        android:state_pressed="false"    
        android:state_selected="false" />

    <item android:drawable="@drawable/ic_button_default_touch" 
        android:state_pressed="true" 
        android:state_selected="false"  />


    <!--Active-->
    <item android:drawable="@drawable/ic_button_active" 
        android:state_enabled="true" 
        android:state_selected="true" 
        android:state_pressed="false" />

    <item android:drawable="@drawable/ic_button_active_touch" 
        android:state_enabled="true" 
        android:state_pressed="true" 
        android:state_selected="true" />
</selector>
于 2020-11-26T22:24:22.933 に答える