2012年11月14日水曜日

【Android】ListView/GridViewでGraphical Layoutにレイアウトを反映させる方法

AndroidのUIをeclipse上で組んでいくときに
Graphical Layoutといってレイアウトをeclipse上でプレビューする事が出来る機能がある.

まぁこれはAndroidを触ったことがあれば常識なのだが.
一応前口上としてこういうの書かないといけない感に襲われるから書いた.

このGraphical Layout,当該XMLに書いてあることしか表示できないので
javaコード上でレイアウトをinfalteするListViewやGridViewはそのままでは
全く違うレイアウトが表示されてしまう.

例として画像,テキスト,ボタンの3つを1つの列に表示させるListViewを考える.
その1列分がこのview_list_item.xml

それをバインドするactivity_main.xml

しかし,activity_main.xmlのGraphical Layoutは

こんな感じに表示される.
view_list_item.xmlをバインドするのはjavaコード上なので当然である.
これをちゃんと表示させるためにはactivity_main.xmlのListViewを少し修正すればよい.
activity_main.xml

変更点は
xmlns:tools="http://schemas.android.com/tools"

tools:listitem="@layout/view_list_item"
の2文を追加したこと.
この指定によってGraphical Layoutが

このように表示される.
よかった.



GridViewも同様である.
画像の上にチェックボックスをもたせたViewをGridViewに列挙させる.
1アイテム分のビューがこのview_grid_item.xml

で,それをバインドするactivity_main.xml

するとこう表示される

ListViewのときと同様に
xmlns:tools="http://schemas.android.com/tools"

tools:listitem="@layout/view_list_item"
の2文を追加してやればいい.
ただし,ListViewと違い,1点だけ気をつけなくてはいけないことがある.
それがGridViewのオプション
android:numColumns
である.
横に何個アイテムを並べるかというオプションで,
画面幅が様々なAndroidでは並べられるだけ自動で計算して並べてくれる
android:numColumns="auto_fit"
を使うことが多いと思うが,
このままではGraphical Layoutが認識してくれない.
Graphical Layoutが認識してくれるようにするためには
android:numColumns="-1"
としなければならない.

つまり,activity_main.xmlはこうなる.

ちゃんと表示された.

ちなみに
http://developer.android.com/intl/ja/reference/android/widget/GridView.html#attr_android:numColumns
によれば,auto_fitと-1はjava上では同値ということらしいが,
Graphical Layoutは-1でないと通じないようだ.
For input string: "auto_fit"
とかいって怒られる.
ハナシの分からんやつである.

一方,この値が-1のままだと今度はコンパイラに
Integer value out of range (at 'numColumns' with value '-1').
などと怒られてしまう.
そのため,レイアウト確認時は-1,それ以外はauto_fitに戻す必要がある.
うーん,馬鹿だ.

0 件のコメント:

コメントを投稿