これを行うにはいくつかの方法があります。
まず、単純に を使用しImageButton
、Java でのクリック時にそのイメージ ドローアブルを手動で切り替えることができます。これは、たとえばAndroidのストック ミュージック プレーヤーがshuffleボタンに対して行うことです。チェックされた状態のボタンの背景を制御することはできませんが、イメージを入れ替えることはできます。これは、Android UI の一貫性の観点から好ましい場合があります。
もう 1 つのオプションは、drawables と 9 つのパッチの複雑なセットを使用してToggleButton
、トグル時に背景や画像リソースを変更するオプションを使用して、 内に画像を取得することです。それが、以下に示すオプションです。ただし、これを行う前に、UI の一貫性に注意してください。
res/layout/foo.xml
...
<ToggleButton
android:textOn="" android:textOff=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shuffle_button" />
...
res/drawable/shuffle_button.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- use "@android:drawable/btn_default" to keep consistent with system -->
<item android:drawable="@drawable/toggle_button_background" />
<item android:drawable="@drawable/shuffle_button_image" />
</layer-list>
res/drawable/toggle_button_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- checked state -->
<item android:state_pressed="false" android:state_checked="true"
android:drawable="@drawable/btn_default_checked" />
<item android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_default_normal_disable" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_default_pressed" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/btn_default_selected" />
<item android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_focused="true"
android:drawable="@drawable/btn_default_normal_disable_focused" />
<item android:drawable="@drawable/btn_default_normal_disable" />
</selector>
res/drawable/shuffle_button_image.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_mp_shuffle_on_btn" android:state_checked="true" />
<item android:drawable="@drawable/ic_mp_shuffle_off_btn" />
</selector>
画像ファイル
警告: これらを使用すると、カスタマイズされた OS UI (つまり、HTC のセンス UI) を備えたデバイスでアプリの表示に一貫性がなくなります。
ic_mp_shuffle_<state>_btn.9.png
画像が中央に配置され、ボタンに合わせて引き伸ばされないように、9 パッチである必要があります。以下はhdpi
、アイコンのバージョンの例です。
res/drawable-(h|m|ldpi)/ic_mp_shuffle_(on|off)_btn.9.png
最終的な注意: 可能な場合はシステム UI と一貫性を保つようにしてください。また、ボタンなどの UI 要素のグラフィックが異なるカスタマイズされたバージョンの OS を搭載したデバイスでアプリが実行される可能性があることに注意してください。この例はHTC Senseで、標準の Android の灰色/オレンジ/黄色のボタンの代わりに緑色のボタンがあります。そのため、オープン ソース リポジトリから PNG ファイルをコピーしbtn_default_...
てトグル可能なボタンの背景を作成すると、それらのデバイスでの一貫性が失われます。