Androidアプリの開発初学者が苦戦することのひとつに挙がるのは、やはりレイアウトだと思います。思ったところにボタンが行かなかったり、クシャッと潰れてしまったり……。
ここでは、開発しながらわかってきたことをまとめようと思います。
特に、今回は、FrameLayoutを使用するときに気をつけることをまとめます。
- 画面やレイアウトのサイズと、配置するUIのサイズ
- layout-gravityとgravity
- marginとpadding
また、今回の内容で参考になった資料がこちらです。
SlideShare | 【第4回】デザイナーがコードから読み解く、Androidアプリのデザインの幅を広げるコツとTips
画面やレイアウトのサイズと、配置するUIのサイズ
FrameLayoutは、UIを重ねて配置することのできる便利なレイアウトです。このレイアウトで特に気をつけなければいけないのが、FrameLayoutの持っているサイズと、配置するUIのサイズです。
FrameLayoutは基本的に、フレームの中の指定した場所にUIを置くだけです。LinearLayoutのように、UIのサイズを調整することはしてもらえません。つまり、フレームの幅の半分以上の幅を持ったUIを2つ横並びに配置すると、UI同士が重なり、みっともないことになります(テキストがダブって表示される、ボタンの一部が隠れるなど)。高さ方向についても、同様です。
これが顕著に感じられるのは、画面の向きを縦や横にした時。一方のレイアウトを定義しない場合は、向きを変えてUIが重ならないかをチェックすることをおすすめします。
layout-gravityとgravity
これはどのレイアウトにも共通することですが、layout-gravityとgravityを適切に設定することです。
レイアウトで指定できるパラメータに、「layout-」から始まるものがあります。これは、「配置先のレイアウトに対して」という意味合いがあります。
たとえば、layout-gravityをrightに設定すると、
配置された先のレイアウトに右寄せでUIが配置されます。幅をもったTextViewを配置した場合、左から文字が始まるので、画面の中途半場な位置からテキストが始まったりします。
一方、gravityは、「自分の持っているViewに対して」設定するgravityです。たとえば、Layoutにgravityをrightで設定すると、その中にある全てのUIに対して、右寄せを設定することができます。幅を持ったTextViewにgravityをrightに設定すると、文字が右寄せになります。
marginとpadding
余白という意味では、marginもpaddingも同じなのですが、それぞれ用途は異なります。
marginは、自分以外の他のViewに対しての余白。
paddingは、自身のコンテンツに設定する余白。
同じ余白なのですが、他のViewを離れさせるか、自分を小さくするか、意味は異なります。
おわりに
後半2つは他のレイアウトにも共通する話題でしたが、私がFrameLayoutを使う際に気をつけるようになったことは以上です。FrameLayoutは、使い方がわかると、つい多用してしまいがちです。用途に応じて、適切なレイアウトを選ぶようにしたいですね。