・フォーカスがあった状態
・押された状態
・通常の状態
を定義するのには、以下の様なXMLファイルを作ってやったりします。
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- bad order -->
<item android:state_focused="true" android:drawable="@drawable/item_focused" />
<item android:state_pressed="true" android:drawable="@drawable/item_pressed" />
<item android:drawable="@drawable/item_normal" />
</selector>
そして、ここで落とし穴。
ファイル中のitem要素はボタンの状態が変化した際に上から順に評価されていき、状態に合致するものを見つけたら、それ以降のitemは見に行きません。
http://developer.android.com/intl/ja/resources/tutorials/views/hello-formstuff.html
Note: The order of the- elements is important. When this drawable is referenced, the
- s are traversed in-order to determine which one is appropriate for the current button state. Because the "normal" image is last, it is only applied when the conditions android:state_pressed and android:state_focused have both evaluated false.
具体的には、上のitemの順序の場合には、「フォーカスがあった状態で押す」という事をした時には、state_focusedが選択されてしまい、「押してんのに押した場合用のエフェクトにならない」という不具合が起きてしまいます。
対応策としては、state_pressedの優先順位を上げたいので、まぁ順序を変えてやればいいだけの話。
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- correct order -->
<item android:state_pressed="true" android:drawable="@drawable/item_pressed" />
<item android:state_focused="true" android:drawable="@drawable/item_focused" />
<item android:drawable="@drawable/item_normal" />
</selector>
0 件のコメント:
コメントを投稿