2014年3月14日金曜日

備忘録:TableLayoutへの動的なRowの追加とRowへのItmeの追加

ホームアプリのアプリのランチャーを作っていてつまづいた所をメモ。
なぜかレイアウトが崩れる。
Gravityは均等真ん中でレイアウトファイルで規定しているのだが。。。
TableLayoutに動的にアイテムを入れるところ。
アイテムを追加したら空いてるマスにレイアウトで作成したアイテム、LinearLayoutで囲ったImageViewとTextViewを入れるといった感じ。

TableLayoutクラスのLayoutParamsでparamを作り、それをアイテム内のLinearLayoutに.setLayoutParams(param)。
で、適用したLinearLayoutのwidthをLinearLayout ll.width = 0。
その上で、float ll_weight = 1.0f。
そしてll.width = ll_weight。
こうするとレイアウトがきれいに揃った。
Gravityはレイアウトファイルのほうでやっておいてね。

レイアウトファイルでテーブルレイアウトをweightを持たせたLinearLayoutを入れておいたほうがいいと思った。idとか内部で動的に作るよりは静的に用意しておいたほうがいいよね。レイアウトファイルを切り替えるだけで事足りるし。永続データとしてどこに何が入っていたかを保存しておくだけでいいし。

以下、コード。変数名は適宜解釈してください。
LinearLayoutをIdから見つけてきてますが、childAtとかでinstanceof LinearLayout とかするのがめんどうだからやってるだけです。なので、できれば静的なIdを予め持たせたレイアウトファイルを作ると何かと楽だと思います。

0 件のコメント:

コメントを投稿