ボタンの外観を変える

 ボタンの外観を変えるには、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 の値
 といった感じだね。
 仮設定や、色の名前でつけたい、色を統一したい、なんていうときに便利だね。

 色ではなく画像を指定したい、という場合は…
 すまないけど、他の方の解説を見てほしい。(^_^;

Comments are closed.