View のレイアウト (ViewGroup)

 複数のView を重ねたい、ひとつのグループとして扱いたい。
 そんなときに使うのが、ViewGroup だね。

 ViewGroup は、View を子として内包し、親子関係を作り出せるんだ。
 代表的なところでListView なんかが、これを基礎に作られたりする。
 いってみれば、Android の土台といったところかね。
 また、ViewGroup はView の派生なので、他のViewGroup に含ませることもできるよ。

Layout シリーズ

 ViewGroup には、View を画面にレイアウトするためのclass がいくつかある。
 Layout class というものはないようなんで、オイラはそれらを勝手に、Layout シリーズと呼んでいるよ。

 具体的な使い方は他の方に任せるとして。
 ここでは特徴や違いなんかをまとめてみることにする。

LinearLayout

 子View を縦並び、あるいは横並びにレイアウトする。
 セル画やフォトショップのレイヤーみたいに、重ね合わせることはできない。
 setGravity で左端合わせ、センター合わせなんかの設定ができる。
http://developer.android.com/reference/android/widget/LinearLayout.html

TableLayout

 子View を、行や列で、格子上にレイアウトする。
 setGravity で左端合わせ、センター合わせなんかの設定ができる。
http://developer.android.com/reference/android/widget/TableLayout.html

RelativeLayout

 子View を重ね合わせてレイアウトする。
 セル画やフォトショップのレイヤーみたいな感じ。
 setGravity で左端合わせ、センター合わせなんかの設定ができる。
 レイアウト位置は座標ではなく、addRuleを使って、相関関係で設定するらしい。
 抽象的に例えて、3つのViewがあるとすると…
 View01があって。View02はその右隣。View03はその下。
 …といった具合。
 位置はそれぞれのViewの大きさが関係するので、表示イメージをなにかに下書きしないと苦労しそう。
 ※.設定しなければ、単純に重ね合わせされる。
http://developer.android.com/reference/android/widget/RelativeLayout.html

FrameLayout

 子View をひとつだけ登録できる。
 別のView を加えると置き換えらてしまう…

 って、解説を見たんだけど、やってみると、RelativeLayout のように重ね合わせされちゃうんだよね。(^_^;
 ただし他のLayout と違い、setGravity はなくて、代わりにsetForegroundGravity がある。
 setGravity のようにセンターを指定しても、そのとおりに配置されなくて、その効力未確認…。
 それに気づくまで、RelativeLayout のつもりで使ってたよ。(笑
 FrameLayout は、単純に左上合わせで重ねるだけのレイアウトなのかもしれないね。
http://developer.android.com/reference/android/widget/FrameLayout.html

 Layout に限らず、Andorid での位置指定は、なんかHTML的だね。
 どうも個人的に使い勝手がイマイチ。
 画面座標の指定があってもいいと思うのだけどね…。

レイアウトの注意

 setGravity を設定しているのに、なんか効いてないなぁと思ったら…。
 どうも、ViewGroup の中に FILL_PARENT設定がいると無効になるみたい。
 CENTER などはWRAP_CONTENT 用のものらしく、そのせいのようだ。

Posted in View, レイアウト. Tags: , , , , , . View のレイアウト (ViewGroup) はコメントを受け付けていません »

Viewを重ねるのがAndroid流…?

 たしかイスラムには、こんな言葉があったと思う。
「コーランの全てを理解しようと思ってはならない。
 それが必要とされる時に、真実は目の前に開かれるものだ」
 つまり “すぐに理解できなくても、繰り返し読めば、ひょんな拍子で理解できる時がくる。”と。
 そんなような言葉がカバラにもあった気がする…。

 FrameLayoutのリファレンスを眺めていて、あるmethodが目に留まった。
 onTouchEvent(MotionEvent event) とか、 scrollBy(int x, int y)とか、draw()とか…。
 View classの特徴そのまま。
 いやいや。なんのことはない。
 親class がViewなのだから、継承したmethod が使えて不思議はない。
 Viewのグループ化、レイアウトだけの機能かと思っていたが、これも勘違い。
 つまりFrameLayout も、れっきとしたView の一種なのである。

 なるほど。
 つまるところ、画像表示のSurfaceViewも、ListViewも、ボタンも、すべてViewの一種である。
 してみると。Android の画面は、部品であるいくつものViewを、多層に重ね合わせることで構成しているのだ。
 例えるなら、セル画やフォトショップのレイヤー。
 一枚のスクリーン(Canvas) に、全てを描いていた身からするとかなりリッチ。ちょっとした驚きである。

 Viewを重ねるのがAndroid流。
 なら、設計方針もそれに習うことにしよう。
// まぁ、元々、そういうつもりではいたんだけどね。(w

Posted in 雑記. Tags: , . Viewを重ねるのがAndroid流…? はコメントを受け付けていません »