これは、3つのステップでXMLのみを使用して実行できます。
まず、それを使用するウィジェットが有効か無効かなどに応じて変更できるステートフルドローアブルを作成します。したがって、statelist_example.xmlはドローアブルフォルダに保持されます。
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/expander_ic_minimized"
android:state_enabled="true" />
<item
android:drawable="@drawable/expander_ic_minimized_faded"
android:state_enabled="false" />
</selector>
次に、独自のレイアウトを定義して、layoutsフォルダーでこのドローアブルを使用します。これは、プリファレンスの「widgetLayout」になります。したがって、layout_example.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+android:id/widget_frame"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/icon"
android:src="@drawable/statelist_example"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dip"
android:layout_marginRight="6dip"
android:layout_gravity="center" />
</LinearLayout>
3番目に、このレイアウトを使用するには、すべての設定でwidgetLayoutを指定します。
<Preference
android:key="preference_example"
android:title="@string/preference_title"
android:widgetLayout="@layout/layout_example" />
つまり、基本的には、ステートフルドローアブルを参照するレイアウトをプリファレンス参照する必要があります。
StatelistDrawableのAndroidドキュメント。
PreferencewidgetLayoutのAndroidドキュメント。