Androidアプリ開発をはじめたので、個人的なTipsを随時載せてい行こうと思います。第1号はボタンを敷き詰める方法。応用すればほかのオブジェクトでも可能かと思います。

目的

解説

まず、具体的に例を示します。以下のxmlコードは2×3のボタンを画面いっぱいに並べる場合です。 画像は、それをeclipce環境下のグラフィカルレイアウトで仮想的に並べた様子です。

Android_Button_Sample

このような書き方だと、画面サイズによらず、決まった数を画面いっぱい格子状に並べることができます。

まず重要なのはverticalとhorizontalの入れ子構造になっていることです。 horizontalを利用して、横にボタンを均等にならべそれをひと括りのLinearLayoutと考えます(仮にAと名付ける)。さらに、そのAをverticalで並べるといった考えです。

次に、android:layout_weightを使うことです。 LinearLayoutの子要素(今回はButton)のプロパティとしてandroid:layout_weightを使うと、LinearLayout内での、子の横幅に重みが付けられます。

今回の場合、すべてのボタンの重みを1と設定していますので、1:1:1の横幅でボタンが表示されます。 たとえば、一つの要素を重み2にすれば2:1:1の比率でボタンの横幅が配分され、1個目のボタンは画面の半分を占領することになります。

また、このプロパティ設定をverticalのLinearLayoutに使うと、縦方向の重みづけができるので、7行目や32行目のLinearLayoutに均等な重みをもたせて、縦も均等に表示しています。

horizontalに設定したLinearLayoutの中にさらにButtonを増やせば横の数を増やせますし、 horizontalに設定したLinearLayout自体を中身の要素ごと増やして行けば縦の数を増やせます。 領域の設定に具体的な数値を使わず、match_parentで済ませているので、形が崩れる心配もありません。

今回はLinearLayoutの入れ子という半ば強引といえる方法だと思います。ほかの方法をご存じの方いましたら、ぜひコメントをおねがいします! 質問もぜひどうぞ!

Tipsは以上です。