btn_default.xmlの中身を調べる

ボタンのデザインをする場合のために、デフォルトのボタンがどのように実装されているか調べます。
デフォルトのボタンは、Widget.Buttonというstyleが適用されている。(たぶん)

Widget.Buttonスタイルの定義

android:backgroundにて、drawableのbtn_defaultが指定されている。
android.git.kernel.org Git - platform/frameworks/base.git/blob - core/res/res/values/styles.xml

 173     <style name="Widget.Button">
 174         <item name="android:background">@android:drawable/btn_default</item>
 175         <item name="android:focusable">true</item>
 176         <item name="android:clickable">true</item>
 177         <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item>
 178         <item name="android:textColor">@android:color/primary_text_light</item>
 179         <item name="android:gravity">center_vertical|center_horizontal</item>
 180     </style>

btn_default.xmlの中身

selectorで、Buttonの状態に応じた画像を指定している。
android.git.kernel.org Git - platform/frameworks/base.git/blob - core/res/res/drawable/btn_default.xml

  17 <selector xmlns:android="http://schemas.android.com/apk/res/android">
  18     <item android:state_window_focused="false" android:state_enabled="true"
  19         android:drawable="@drawable/btn_default_normal" />
  20     <item android:state_window_focused="false" android:state_enabled="false"
  21         android:drawable="@drawable/btn_default_normal_disable" />
  22     <item android:state_pressed="true" 
  23         android:drawable="@drawable/btn_default_pressed" />
  24     <item android:state_focused="true" android:state_enabled="true"
  25         android:drawable="@drawable/btn_default_selected" />
  26     <item android:state_enabled="true"
  27         android:drawable="@drawable/btn_default_normal" />
  28     <item android:state_focused="true"
  29         android:drawable="@drawable/btn_default_normal_disable_focused" />
  30     <item
  31          android:drawable="@drawable/btn_default_normal_disable" />
  32 </selector>

色々組み合わせがあってややこしいので、表にしてみます。画像はAndroidのソースからの引用です。

line state_
window_
focused
state_
pressed
state_
enabled
state_
focused
drawable 9.png 備考
18-19 false なし true なし btn_default_normal 通常時
20-21 false なし false なし btn_default_normal_disable disable時
22-23 なし true なし なし btn_default_pressed 押された時
24-25 なし なし true true btn_default_selected フォーカスがある時
26-27 なし なし true なし btn_default_normal 通常時(18-19との違い不明)
28-29 true なし なし なし btn_default_normal_disable_focused disableでフォーカスあり
30-31 なし なし なし なし btn_default_normal_disable disable時(20-21との違い不明)

ボタンの画像をちゃんと用意するなら、下記の5パターンの画像が必要ということみたいです。
・通常時
・disable時
・押されたとき
・フォーカスがあるとき
・disableでフォーカスがあるとき