iPhone開発者のためのAndroid入門【Viewの配置】

By daichi1128
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

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内で

などとして指定します。(分かりやすいようにビューの背景を黄色にしてる)
しかし、このままでは以下のように全画面にビューが表示されてしまいます。

view-200x300

これは指定したLayoutParamsはGroupViewクラスの子ビューでないと有効にならないためです。

なので、基本的にルートビューはGroupViewのサブクラスを指定することになります。GroupViewのサブクラスLinearLayoutクラスを使った場合の例はこんな感じです。(layoutの背景が緑、ビューの背景が黄色)

layout1-200x300

幅、高さの指定にはLayoutParamsに定義されているfill_parentとwrap_contentが使えます。それぞれ、親ビューのサイズにあわせる、自身のコンテンツサイズにあわせるという意味です。TextViewなどでsetText(”hogehoge”)などとして幅に対してwrap_contentを指定すると、hogehogeの文字数分のサイズに自動的に調整されます。

text-200x300

基本的にはこのようにLayoutParamsを使って場所を指定します。LayoutParamsはGroupViewごとに異なるパラメータを指定できるようになっています。

Gravity

たとえば、LinearLayoutのLayoutParamsはgravityを指定できるようになっていて、これで右寄りや真ん中にビューを置くことができる。

こんな感じで、このようになる。

center-200x300

パラメータの詳細はこちら。
LinearLayout.LayoutParams | Android Developers

LinearLayoutの子ビュー全体に真ん中合わせをしたい場合は、LinearLayout自体のgravityに設定する。

Margin

また、LinearLayoutParamsはMarginLayoutParamsを継承しているのでマージンの指定もできます。

margin-200x300

レイアウトはこんな感じです。

最後に普通に画面のど真ん中に100×100のビューを置きたい場合は

これでOK。

center_view-200x300

レイアウトはxmlで指定できますが、これらのことをおさえておけば同じ要領でいけると思います。

関連する投稿