Android には GridLayout というレイアウトがあり、格子状に子ビューを並べることができます。単純に格子状にするだけでなく、格子複数個分の長方形の範囲を占有するビューも扱えます。API Level 14 から使えますが、サポートライブラリを使うと API Level 7 から使えます。

似たようなものに API Level 1 から使える TableLayout というレイアウトがありますが、これは横方向に複数格子を占有する子ビュー (colspan) は作れても縦方向に複数格子を占有する子ビュー (rowspan) は作れません。HTML の table に近いレイアウトを実現できるのは TableLayout ではなく GridLayout ということになります。

この GridLayout、格子状にビューを並べるなら機能的には最も高いのですが、一つだけダメな点があります。GridLayout が占有する領域を埋め尽くすように子ビューのサイズを均等割り(あるいは比率指定)する機能がありません。これはレイアウトパラメータに weight が指定できないということからくる制限です。なお、均等でなくてもいいなら、右端の列や下端の行のビューをそれぞれ引き延ばすことで領域を埋め尽くすようにレイアウトすることはできます。

グリッド状のビュー群を均等割りするもっとも単純な方法は、horizontal な LinearLayout と vertical な LinearLayout を入れ子にして、それぞれで均等割りする方法です。レイアウトが多段になりますが、難しいことは特にありません。ただし、この方法では四畳半間のようなレイアウトは実現できません(GridLayout ならできる)。

この前作った電卓は最初は GridLayout を使ってボタンを配置していたのですが、均等割りができないということに気づいて泣きながら多段 LinearLayout に書き直していました。電卓のボタンは四畳半間レイアウトにはならないので、面倒ではあっても機能上は問題ありません。

ちなみに前述の TableLayout、GUI のレイアウトエディタでいじっている限りでは多段 LinearLayout と比べて利点が無いように見えます。レイアウト XML を直接編集する場合はもうちょっと高機能なはずなんですが…

Trackback

no comment untill now

Add your comment now