iPhone開発者のためのAndroid入門【Viewの配置】
iPhoneアプリ開発者もそろそろAndroidへ参入しようかなと考えている人も多いと思います。
なので今回から、iPhone開発者のためのAndroid入門をはじめようと思います。
今回はビューの配置についてです。
iPhoneでのビューの配置は、追加するビューに親ビューに対するframeを指定して、[view addSubview:addView]などとすれば、好きな場所にビューを追加できますが、Androidでは少し勝手が違います。
Viewの構造
AndroidでiPhoneのUIViewにあたるのはandroid.view.Viewです。
View自体はサブビューを持つことはできません。
サブビューを持てるのはViewのサブクラスViewGroupです。
ViewGroupは子ビューの配置方法などを指定して、ビューの追加ができます。
ViewGroupはabstarctなクラスなので、実際にはViewGroupのサブクラスである、LinearLayout、FrameLayout、RelativeLayout、TableLayoutなどのクラスを使ってビューの配置をします。
LayoutParamsによる配置
Viewの幅や高さはGroupView.LayoutParamsを使って指定します。
setWidth、setHeightメソッドはないので注意。
例えば幅320px、高さ44pxのビューにしたい場合、ActivityのonCreate内で
などとして指定します。(分かりやすいようにビューの背景を黄色にしてる)
しかし、このままでは以下のように全画面にビューが表示されてしまいます。
これは指定したLayoutParamsはGroupViewクラスの子ビューでないと有効にならないためです。
なので、基本的にルートビューはGroupViewのサブクラスを指定することになります。GroupViewのサブクラスLinearLayoutクラスを使った場合の例はこんな感じです。(layoutの背景が緑、ビューの背景が黄色)
幅、高さの指定にはLayoutParamsに定義されているfill_parentとwrap_contentが使えます。それぞれ、親ビューのサイズにあわせる、自身のコンテンツサイズにあわせるという意味です。TextViewなどでsetText(”hogehoge”)などとして幅に対してwrap_contentを指定すると、hogehogeの文字数分のサイズに自動的に調整されます。
基本的にはこのようにLayoutParamsを使って場所を指定します。LayoutParamsはGroupViewごとに異なるパラメータを指定できるようになっています。
Gravity
たとえば、LinearLayoutのLayoutParamsはgravityを指定できるようになっていて、これで右寄りや真ん中にビューを置くことができる。
こんな感じで、このようになる。
パラメータの詳細はこちら。
LinearLayout.LayoutParams | Android Developers
LinearLayoutの子ビュー全体に真ん中合わせをしたい場合は、LinearLayout自体のgravityに設定する。
Margin
また、LinearLayoutParamsはMarginLayoutParamsを継承しているのでマージンの指定もできます。
レイアウトはこんな感じです。
最後に普通に画面のど真ん中に100×100のビューを置きたい場合は
これでOK。
レイアウトはxmlで指定できますが、これらのことをおさえておけば同じ要領でいけると思います。








