A layout resource defines the architecture for the UI in an `Activity` or a
component of a UI.

file location:
:   `res/layout/`*filename*`.xml`  

    The filename is used as the resource ID.

compiled resource datatype:
:   Resource pointer to a [View](https://developer.android.com/reference/android/view/View) (or subclass) resource

resource reference:
:
    In Java: `R.layout.`*filename*  

    In XML: `@[`*package* `:]layout/`*filename*

syntax:
:

    ```xml
    <?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>
    ```

    **Note:** The root element can be a
    [ViewGroup](https://developer.android.com/reference/android/view/ViewGroup), a [View](https://developer.android.com/reference/android/view/View), or a [`<merge>`](https://developer.android.com/guide/topics/resources/layout-resource#merge-element) element, but there can be only
    one root element and it must contain the `xmlns:android` attribute with the `android`
    namespace as shown in the preceding syntax example.

elements:
:

    `<ViewGroup>`
    :   A container for other [View](https://developer.android.com/reference/android/view/View) elements. There are many
        different kinds of [ViewGroup](https://developer.android.com/reference/android/view/ViewGroup) objects, and each one lets you
        specify the layout of the child elements in different ways. Different kinds of
        `ViewGroup` objects include [LinearLayout](https://developer.android.com/reference/android/widget/LinearLayout),
        [RelativeLayout](https://developer.android.com/reference/android/widget/RelativeLayout), and [FrameLayout](https://developer.android.com/reference/android/widget/FrameLayout).

        Don't assume that any derivation of `ViewGroup`
        accepts nested views. Some view groups
        are implementations of the [AdapterView](https://developer.android.com/reference/android/widget/AdapterView) class, which determines
        its children only from an [Adapter](https://developer.android.com/reference/android/widget/Adapter).

        Attributes:

        `android:id`
        :   *Resource ID* . A unique resource name for the element, which you can
            use to obtain a reference to the `ViewGroup` from your application. For more
            information, see the [Value for android:id](https://developer.android.com/guide/topics/resources/layout-resource#idvalue) section.

        `android:layout_height`
        :   *Dimension or keyword* . **Required** . The height for the group, as a
            dimension value (or
            [dimension resource](https://developer.android.com/guide/topics/resources/more-resources#Dimension)) or a keyword
            (`"match_parent"` or `"wrap_content"`). For more information,
            see the [Values for android:layout_height and
            android:layout_width](https://developer.android.com/guide/topics/resources/layout-resource#layoutvalues) section.

        `android:layout_width`
        :   *Dimension or keyword* . **Required** . The width for the group, as a
            dimension value (or
            [dimension resource](https://developer.android.com/guide/topics/resources/more-resources#Dimension)) or a keyword
            (`"match_parent"` or `"wrap_content"`). For more information,
            see the [Values for android:layout_height and
            android:layout_width](https://developer.android.com/guide/topics/resources/layout-resource#layoutvalues) section.

        The `ViewGroup`
        base class supports more attributes, and many more are supported by each implementation of
        `ViewGroup`. For a reference of all available attributes,
        see the corresponding reference documentation for the [ViewGroup](https://developer.android.com/reference/android/view/ViewGroup) class,
        for example, the [`LinearLayout` XML
        attributes](https://developer.android.com/reference/android/widget/LinearLayout#lattrs).

    `<View>`
    :   An individual UI component, generally referred to as a *widget* . Different
        kinds of [View](https://developer.android.com/reference/android/view/View) objects include [TextView](https://developer.android.com/reference/android/widget/TextView),
        [Button](https://developer.android.com/reference/android/widget/Button), and [CheckBox](https://developer.android.com/reference/android/widget/CheckBox).

        Attributes:

        `android:id`
        :   *Resource ID* . A unique resource name for the element, which you can use to
            obtain a reference to the `View` from your application. For more
            information, see the [Value for android:id](https://developer.android.com/guide/topics/resources/layout-resource#idvalue) section.

        `android:layout_height`
        :   *Dimension or keyword* . **Required** . The height for the element, as
            a dimension value (or
            [dimension resource](https://developer.android.com/guide/topics/resources/more-resources#Dimension)) or a keyword
            (`"match_parent"` or `"wrap_content"`). For more information,
            see the [Values for android:layout_height and
            android:layout_width](https://developer.android.com/guide/topics/resources/layout-resource#layoutvalues) section.

        `android:layout_width`
        :   *Dimension or keyword* . **Required** . The width for the element, as
            a dimension value (or
            [dimension resource](https://developer.android.com/guide/topics/resources/more-resources#Dimension)) or a keyword
            (`"match_parent"` or `"wrap_content"`). For more information,
            see the [Values for android:layout_height and
            android:layout_width](https://developer.android.com/guide/topics/resources/layout-resource#layoutvalues) section.

        The `View`
        base class supports more attributes, and many more are supported by each implementation of
        `View`. For more information, read [Layouts](https://developer.android.com/guide/topics/ui/declaring-layout). For
        a reference of all available attributes,
        see the corresponding reference documentation, for example, the [`TextView` XML attributes](https://developer.android.com/reference/android/widget/TextView#lattrs).

    `<requestFocus>`
    :   Any element representing a [View](https://developer.android.com/reference/android/view/View) object can include this empty element,
        which gives its parent initial focus on the screen. You can have only one of these
        elements per file.

    `<include>`

    :   Includes a layout file into this layout. Attributes:

        `layout`
        :   *Layout resource* . **Required**. Reference to a layout
            resource.

        `android:id`
        :   *Resource ID*. Overrides the ID given to the root view in the included layout.

        `android:layout_height`
        :   *Dimension or keyword* . Overrides the height given to the root view in the
            included layout. Only effective if `android:layout_width` is also declared.

        `android:layout_width`
        :   *Dimension or keyword* . Overrides the width given to the root view in the
            included layout. Only effective if `android:layout_height` is also declared.

        You can include any other layout attributes in the `<include>` that are
        supported by the root element in the included layout and they override those defined in the
        root element.

        **Caution:** If you want to override layout attributes using
        the `<include>` tag, you must override both
        `android:layout_height` and `android:layout_width` in order for
        other layout attributes to take effect.

        Another way to include a layout is to use [ViewStub](https://developer.android.com/reference/android/view/ViewStub): a lightweight
        view that consumes no layout space until you explicitly inflate it. When you do, it includes a
        layout file defined by its `android:layout` attribute. For more information about using `ViewStub`, read [Load
        views on demand](https://developer.android.com/develop/ui/views/layout/improving-layouts/loading-ondemand).

    `<merge>`
    :   An alternative root element that isn't drawn in the layout hierarchy. Using this as the
        root element is useful when you know that this layout is placed into a layout
        that already contains the appropriate parent `View` to contain the children of the
        `<merge>` element.

        <br />


        This is particularly useful when you plan to include this layout
        in another layout file using [`<include>`](https://developer.android.com/guide/topics/resources/layout-resource#include-element) and
        this layout doesn't require a different [ViewGroup](https://developer.android.com/reference/android/view/ViewGroup) container. For more
        information about merging layouts, read [Reuse layouts with \<include\>](https://developer.android.com/develop/ui/views/layout/improving-layouts/reusing-layouts).


    #### Value for android:id


    For the ID value, you typically use this syntax form: `"@+id/`*name*`"`, as shown in the following example. The
    plus symbol, `+`, indicates that this is a new resource ID, and the `aapt` tool creates
    a new resource integer in the `R.java` class, if it doesn't already exist.

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

    The `nameTextbox` name is now a resource ID attached to this element. You can then
    refer to the [TextView](https://developer.android.com/reference/android/widget/TextView) to which the ID is associated in Java:

    ### Kotlin

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

    ### Java

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

    This code returns the `TextView` object.


    However, if you have already defined an [ID resource](https://developer.android.com/guide/topics/resources/drawable-resource#Id), and it isn't
    already used, then you can apply that ID to a `View` element by excluding the
    plus symbol in the `android:id` value.


    #### Values for android:layout_height and
    android:layout_width


    The height and width values are expressed using any of the
    [dimension
    units](https://developer.android.com/guide/topics/resources/more-resources#Dimension) supported by Android (px, dp, sp, pt, in, mm) or with the following keywords:

    |     Value      |                                               Description                                                |
    |----------------|----------------------------------------------------------------------------------------------------------|
    | `match_parent` | Sets the dimension to match that of the parent element. Added in API level 8 to deprecate `fill_parent`. |
    | `wrap_content` | Sets the dimension only to the size required to fit the content of this element.                         |


    #### Custom view elements


    You can create custom [View](https://developer.android.com/reference/android/view/View) and [ViewGroup](https://developer.android.com/reference/android/view/ViewGroup)
    elements and apply them to your layout the same as a standard layout
    element. You can also specify the attributes supported in the XML element. For more information,
    see [Create custom view components](https://developer.android.com/guide/topics/ui/custom-components).


example:
    : XML file saved at `res/layout/main_activity.xml`:  

    ```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>
    ```

    This application code loads the layout for an [Activity](https://developer.android.com/reference/android/app/Activity) in the
    [onCreate()](https://developer.android.com/reference/android/app/Activity#onCreate(android.os.Bundle)) method:
:

    ### Kotlin

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

    ### Java

    ```java
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
    }
    ```

see also:
:
    - [Layouts](https://developer.android.com/guide/topics/ui/declaring-layout)
    - [View](https://developer.android.com/reference/android/view/View)
    - [ViewGroup](https://developer.android.com/reference/android/view/ViewGroup)