ボタンの外観を変えるには、xmlで設定し、それをsetBackgroundResource() method で適用することになる。
※.「xmlナシ」については→XMLなしで、ボタンの外観を変える
setBackgroundResource
引数に、設定xmlを指定するだけ。
たとえばこんな感じ。
but.setBackgroundResource( R.drawable.button_style );
※.xmlファイル名は任意
XMLの設定
ただ単に外観を変えるだけなら、xmlの設定は必要ない。
setBackgroundDrawable()やsetBackgroundResource() を使えばいい。
設定xmlが必要になるのは、状態によって変化させたいとき。
たとえば、ボタンにフォーカスが当たった、ボタンを選択された。
これらの「状態」と、その時の「色・画像」を設定したものが、設定内容となる。
単純に選択/非選択だけの設定ならこんな感じになる。
<?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true"> <color android:color="#ff00ff00" /> </item> <item> <color android:color="#ff0000ff" /> </item> </selector>
全てを設定すると、こんな感じ。
<?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" > <color android:color="#00ffffff" /> </item> <item android:state_pressed="true" > <color android:color="#80ff0000" /> </item> <item android:state_focused="true"> <color android:color="#8000ff00" /> </item> <item> <color android:color="#800000ff" /> </item> </selector>
上から順に…
- 選択できない(非活性) … 透明(白)
- 押された瞬間 … 赤(半透明)
- 選択された … 緑(半透明)
- 選択されていない(通常) … 青(半透明)
実行すると、「clickしたのに、緑色になる…」なんて風に思うかもしれない。
でもよく見てほしい。
clickした瞬間は赤になるハズだ。
どうもstate_pressed は、clickした瞬間を表しているらしい。
決定状態を作るには、リスナーのonClickでやる以外はなさそうだ。
設定は優先順位順で、itemタグのパラメータは状態を現す
プログラム言語に読み替えると、こんな感じになる。
if ( state_enabled == false ){ color="#00ffffff"; } else if ( state_pressed == true ){ color="#80ff0000"; } else if ( state_focused == true ){ color="#8000ff00"; }else{ color="#800000ff"; }
なので、表記の順番には気をつけなくてはいけない。
また、パラメータは複数つけることもできる。
たとえば
<item android:state_enabled="true" android:state_pressed="true" > <color android:color="#80ff0000" /> </item>
選択できる状態で、押された … 半透明・赤
といった感じ。
by the way…
色の指定には、他のxml から引用することもできる。
<color android:color="@color/blue_t" />
color.xml の中に記述されている、blue_t の値
といった感じだね。
仮設定や、色の名前でつけたい、色を統一したい、なんていうときに便利だね。
色ではなく画像を指定したい、という場合は…
すまないけど、他の方の解説を見てほしい。(^_^;