ビューとビューグループとレイアウトの種類【Androidアプリ開発】

2023-07-29Androidアプリ開発入門

ViewとViewGroup

Androidアプリのビューとビューグループの説明とレイアウトの種類について書いていきます。

ViewとViewGroup

ビューグループはレイアウトを指していて、非表示のコンテナにレイアウトするための土台の様なものです。画面を構成するコンポーネントのFragmentもビューグループの扱いになります。

レイアウトは種類により扱えるビューが決まっています。そしてレイアウトの中に別のレイアウトを入れたりと入れ子にする事もできます。あんまり階層が深いと読み込みに時間がかかる場合もあるので注意して下さい。またレイアウトがサブクラスの別レイアウトを持ってる事もあります。ビューとビューグループは下図の様なツリー構成になっています。

レイアウトのViewGroupとビューのツリー構造

レイアウト方法

ビューを画面に配置するには2通りあります。コード側から書いても良いですが大変だしコードが膨大になるので基本的にはXMLレイアウトファイルを使用します。ビューの大きさやテキストなどの情報の設定や画面のどこに配置するかなどの設定を定義します。ビューに何かしら処理させたい時はコードエディタの方に書いていきます。レイアウトエディタで視覚的に操作することが可能です。

レイアウトの種類

共通レイアウト

主要なレイアウトを幾つか書いておきます。大抵の事はConstraintLayoutでまかなえます。

ConstraintLayout

Jetpackのレイアウト。現在の主流で複雑なレイアウトも可能です。

MotionLayout

ConstraintLayoutのサブクラスでビューを動かしたり色を変えたりアニメーション化する機能です。

MotionLayoutの例
引用:Androidデベロッパー

FrameLayout

画面を分割してビューを配置します。

FrameLayoutのイメージ図

GridLayout

3×3、5×7の様にグリッド状にビューを並べます。

GridLayoutのイメージ図

TabaleLayout

テーブル形式のレイアウト。GridLayoutに似てますががセルを結合できたりします。

TableLayoutのイメージ図

WebView

ウェブページを表示したい時に使用します。

WebViewのイメージ図

LinearLayout

縦・横方向にビューを並べるレイアウト。
【現在はConstraintLayoutを使うように推奨されています】

RelativeLayout

他のビューに対して相対的に配置していく。
【現在はConstraintLayoutを使うように推奨されています】

アダプターレイアウト

配列やデータベースクエリなどのソースからデータを取得して配置できます。

RecyclerView

JetpackのレイアウトでListViewの改良版になってます。データをリスト状に並べます。

RecyclerViewのイメージ図

CardView

CardViewにセットしたデータをリスト状に並べます。

CardViewのイメージ図

レイアウトリソースファイルの読み込み

XMLレイアウトを画面に読み込ませるにはsetContentViewメソッドでレイアウトファイルを参照します。参照の書き方は[R.layout.レイアウトファイル名]になります。

setContentView(R.layout.activity_main)

上記をonCreate()コールバッグで呼び出します。これは画面が作成される時に最初に呼ばれるコールバッグメソッドです。Android Studioでは下記の記述はプロジェクトを作成すると記述されています。

fun onCreate(savedInstanceState: Bundle) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
}

テキスト、カラー、スタイルのリソース

ビューの文字列(text)・カラーコード(color)・スタイルをリソースファイルで一括管理する事ができます。Android Studioでは[res/values]に置いてあり、ファイル名は下記になっています。

strings.xmlアプリ内のビューの文字列を定義。
colors.xmlアプリ内のビューのカラーコードを定義。
styles.xml独自にテーマを作り、スタイルを定義。

詳しくは下記の記事へどうぞ

ビューをプログラムコードから操作する

ビューをプログラムコードから動的に変更する事も可能です。例えばレイアウトファイルに配置したテキストビューの文字列を変更したいなど、レイアウトファイルで定義している事はコード側からでも操作可能です。