2012年11月14日水曜日

【Android】Buttonの背景に画像を指定するとレイアウトが崩れる


Buttonの背景に画像を使うとレイアウトが崩れる…
wrap_contentしてくれない…
そんなことに一瞬だけハマってしまった.

activity_main.xml

文字数が2文字,5文字,20文字のボタンを作っている.
それぞれ上から
・通常ボタン
・backgroundに色(#999999)を設定したボタン
・backgroundに9patch画像を設定したボタン
layout_width="wrap_content"を指定しているのに
文字数が少ない【OK】のボタンの時に
幅が広くなってしまっている.

こうやって並べるとなんとなく理由は分かると思うが
OKとキャンセルだけで組んでたときは
なんでOKとキャンセルとが等じ幅になるんだ!
とパニックになっていた.

理由は簡単.
背景に使っていた画像が
こんなやつだったため.

9patchというものは背景に設定したアイテムが広ければうまい具合に拡大してくれるが,
狭い場合には縮小はしてくれないようだ.
そのため,OKという文字列はこの9patch画像に対して
文字数が少なすぎて,wrap_contentできなかったのだ.

ボタン画像やインプット画像を作る場合は
幅の狭いもの画像を作るべきである.
9patch画像をこれに差し替えると
ちゃんとwrap_contentされた.


今回は関係ないけど背景が色指定の場合は
極限を目指したかのようにとてつもなく狭いため,
paddingを設定しないと見るに耐えないUIになる.

0 件のコメント:

コメントを投稿