レイアウト リソース

レイアウト リソースは、アクティビティ内の UI のアーキテクチャや、UI のコンポーネントのアーキテクチャを定義します。

ファイルの場所:
res/layout/filename.xml
ファイル名はリソース ID として使用されます。
コンパイル済みリソースのデータ型:
View(またはサブクラス)リソースへのリソース ポインタ。
リソース参照:
Java の場合: R.layout.filename
XML の場合: @[package:]layout/filename
構文:
    <?xml version="1.0" encoding="utf-8"?>
    <ViewGroup
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [ViewGroup-specific attributes] >
        <View
            android:id="@[+][package:]id/resource_name"
            android:layout_height=["dimension" | "match_parent" | "wrap_content"]
            android:layout_width=["dimension" | "match_parent" | "wrap_content"]
            [View-specific attributes] >
            <requestFocus/>
        </View>
        <ViewGroup >
            <View />
        </ViewGroup>
        <include layout="@layout/layout_resource"/>
    </ViewGroup>
    

注: ルート要素としては、ViewGroup 要素、View 要素、<merge> 要素のいずれかを使用できますが、ルート要素は 1 つだけに限られます。また、android 名前空間を持つ xmlns:android 属性をルート要素に格納する必要があります。上記の構文をご覧ください。

要素:
<ViewGroup>
他の View 要素のコンテナ。ViewGroup オブジェクトにはさまざまな種類があり、それぞれがそれぞれの方法で子要素のレイアウトを指定できます。ViewGroup オブジェクトの主な種類としては、LinearLayoutRelativeLayoutFrameLayout などがあります。

ViewGroup の種類によって、受け入れ可能なネスト View が異なります。たとえば、AdapterView クラス実装の ViewGroup の場合、子は Adapter から渡されたものだけに限られます。

属性:

android:id
リソース ID。要素を示す一意のリソース名。アプリから ViewGroup への参照を取得する際に使用します。詳細については、下記の android:id の値をご覧ください。
android:layout_height
サイズまたはキーワード。必須。グループの高さを、サイズ値(サイズリソース)またはキーワード("match_parent" または "wrap_content")として指定します。詳細については、下記の有効な値をご覧ください。
android:layout_width
サイズまたはキーワード。必須。グループの幅を、サイズ値(サイズリソース)またはキーワード("match_parent" または "wrap_content")として指定します。詳細については、下記の有効な値をご覧ください。

ViewGroup 基本クラスでは、ほかにもさまざまな属性がサポートされています。また、 の各実装では、さらに多くの属性がサポートされています。利用可能なすべての属性のリファレンスについては、ViewGroup クラスの各リファレンス ドキュメント(たとえば、LinearLayout XML 属性)をご覧ください。

<View>
個々の UI コンポーネント。一般的に「ウィジェット」と呼ばれます。View オブジェクトの主な種類としては、TextViewButtonCheckBox などがあります。

属性:

android:id
リソース ID。要素を示す一意のリソース名。アプリから View への参照を取得する際に使用します。詳細については、下記の android:id の値をご覧ください。
android:layout_height
サイズまたはキーワード。必須。要素の高さを、サイズ値(サイズリソース)またはキーワード("match_parent" または "wrap_content")として指定します。詳細については、下記の有効な値をご覧ください。
android:layout_width
サイズまたはキーワード。必須。要素の幅を、サイズ値(サイズリソース)またはキーワード("match_parent" または "wrap_content")として指定します。詳細については、下記の有効な値をご覧ください。

View 基本クラスでは、ほかにもさまざまな属性がサポートされています。また、 の各実装では、さらに多くの属性がサポートされています。詳細については、レイアウトをご覧ください。利用可能なすべての属性のリファレンスについては、各リファレンス ドキュメント(たとえば、TextView XML 属性)をご覧ください。

<requestFocus>
View オブジェクトを示す任意の要素内に、この空要素を格納することができます。これにより、親要素に画面上の初期フォーカスが与えられます。この要素は、ファイルごとに 1 つだけ指定することができます。
<include>
このレイアウトにレイアウト ファイルを組み込みます。

属性:

layout
レイアウト リソース。必須。レイアウト リソースへの参照。
android:id
リソース ID。組み込まれるレイアウト内のルートビューに付与されている ID をオーバーライドします。
android:layout_height
サイズまたはキーワード。組み込まれるレイアウト内のルートビューに付与されている高さをオーバーライドします。android:layout_width も宣言されている場合に限り有効になります。
android:layout_width
サイズまたはキーワード。組み込まれるレイアウト内のルートビューに付与されている幅をオーバーライドします。android:layout_height も宣言されている場合に限り有効になります。

組み込まれるレイアウト内のルート要素が他のレイアウト属性をサポートしている場合、そのレイアウト属性を <include> 内で指定することができます。指定した場合、ルート要素内で定義されている属性はオーバーライドされます。

注: <include> タグを使用してレイアウト属性をオーバーライドする場合、他のレイアウト属性を有効にするには、android:layout_heightandroid:layout_width の両方をオーバーライドする必要があります。

レイアウトを組み込む別の方法として、ViewStub を使用する方法があります。これは、明示的にインフレートするまでレイアウト スペースを消費しない軽量のビューであり、インフレートした時点で、android:layout 属性によって定義されているレイアウト ファイルが組み込まれます。ViewStub の使用方法については、オンデマンドでビューをロードするをご覧ください。

<merge>
レイアウト階層内に描画されない代替ルート要素。<merge> 要素の子を格納する親ビューをすでに組み込んでいるレイアウト内に、このレイアウトを配置することを把握している場合は、この要素をルート要素として使用すると便利です。この方法は特に、<include> を使用してこのレイアウトを別のレイアウト ファイル内に組み込む予定で、このレイアウトが別の ViewGroup コンテナを必要としない場合に便利です。レイアウトのマージの詳細については、<include/> を使用してレイアウトを再利用するをご覧ください。

android:id の値

ID 値には通常、"@+id/name" の構文形式を使用する必要があります。プラス記号(+)は、これが新しいリソース ID であることを示し、aapt ツールが R.java クラス内に新しいリソース整数を作成します(まだ存在しない場合)。たとえば、次のようになります。

    <TextView android:id="@+id/nameTextbox"/>
    

nameTextbox 名は、この要素にアタッチされたリソース ID です。これにより、Java 内で、ID が関連付けられている TextView を参照できるようになります。

Kotlin

    val textView: TextView? = findViewById(R.id.nameTextbox)
    

Java

    TextView textView = findViewById(R.id.nameTextbox);
    

このコードは、TextView オブジェクトを返します。

すでに ID リソースを定義済みの場合(そして、まだ使用していない場合)は、android:id 値内のプラス記号を除外することで、その ID を View 要素に適用できます。

android:layout_heightandroid:layout_width の値:

高さと幅の値は、Android でサポートされているサイズ単位(px、dp、sp、pt、in、mm)を使用するか、以下のキーワードを使用して表現します。

説明
match_parent 親要素のサイズと一致するようにサイズを設定します。サポートが終了した fill_parent の後継として、API レベル 8 で追加されました。
wrap_content この要素のコンテンツに適合するうえで必要最小限のサイズに設定します。

カスタムビュー要素

独自のカスタム View 要素やカスタム ViewGroup 要素を作成して、標準レイアウト要素と同じようにレイアウトに適用することができます。また、XML 要素でサポートされている属性を指定することもできます。詳細については、カスタム コンポーネントをご覧ください。

例:
次の XML ファイルを res/layout/main_activity.xml に保存するとします。
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical" >
        <TextView android:id="@+id/text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Hello, I am a TextView" />
        <Button android:id="@+id/button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hello, I am a Button" />
    </LinearLayout>
    

次のアプリコードは、onCreate() メソッド内で、Activity のレイアウトをロードします。

Kotlin

    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
    }
    

Java

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
    }
    
関連項目: