Layout resource
Stay organized with collections
Save and categorize content based on your preferences.
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
(or subclass) resource - resource reference:
-
In Java:
R.layout.filename
In XML:@[package:]layout/filename
- syntax:
-
<?xmlversion="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-specificattributes]> <View android:id="@[+][package:]id/resource_name" android:layout_height=["dimension"|"match_parent"|"wrap_content"] android:layout_width=["dimension"|"match_parent"|"wrap_content"] [View-specificattributes]> <requestFocus/> </View> <ViewGroup> <View/> </ViewGroup> <includelayout="@layout/layout_resource"/> </ViewGroup>
Note: The root element can be a
ViewGroup
, aView
, or a<merge>
element, but there can be only one root element and it must contain thexmlns:android
attribute with theandroid
namespace as shown in the preceding syntax example. - elements:
-
<ViewGroup>
- A container for other
View
elements. There are many different kinds ofViewGroup
objects, and each one lets you specify the layout of the child elements in different ways. Different kinds ofViewGroup
objects includeLinearLayout
,RelativeLayout
, andFrameLayout
.Don't assume that any derivation of
ViewGroup
accepts nested views. Some view groups are implementations of theAdapterView
class, which determines its children only from anAdapter
.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 section. android:layout_height
- Dimension or keyword. Required. The height for the group, as a
dimension value (or
dimension resource) or a keyword
(
"match_parent"
or"wrap_content"
). For more information, see the Values for android:layout_height and android:layout_width section. android:layout_width
- Dimension or keyword. Required. The width for the group, as a
dimension value (or
dimension resource) or a keyword
(
"match_parent"
or"wrap_content"
). For more information, see the Values for android:layout_height and android:layout_width section.
The
ViewGroup
base class supports more attributes, and many more are supported by each implementation ofViewGroup
. For a reference of all available attributes, see the corresponding reference documentation for theViewGroup
class, for example, theLinearLayout
XML attributes. <View>
- An individual UI component, generally referred to as a widget. Different
kinds of
View
objects includeTextView
,Button
, andCheckBox
.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 section. android:layout_height
- Dimension or keyword. Required. The height for the element, as
a dimension value (or
dimension resource) or a keyword
(
"match_parent"
or"wrap_content"
). For more information, see the Values for android:layout_height and android:layout_width section. android:layout_width
- Dimension or keyword. Required. The width for the element, as
a dimension value (or
dimension resource) or a keyword
(
"match_parent"
or"wrap_content"
). For more information, see the Values for android:layout_height and android:layout_width section.
The
View
base class supports more attributes, and many more are supported by each implementation ofView
. For more information, read Layouts. For a reference of all available attributes, see the corresponding reference documentation, for example, theTextView
XML attributes. <requestFocus>
- Any element representing a
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 bothandroid:layout_height
andandroid:layout_width
in order for other layout attributes to take effect.Another way to include a layout is to use
ViewStub
: a lightweight view that consumes no layout space until you explicitly inflate it. When you do, it includes a layout file defined by itsandroid:layout
attribute. For more information about usingViewStub
, read Load views on demand. <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.This is particularly useful when you plan to include this layout in another layout file using
<include>
and this layout doesn't require a differentViewGroup
container. For more information about merging layouts, read Reuse layouts with <include>.
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 theaapt
tool creates a new resource integer in theR.java
class, if it doesn't already exist.<TextViewandroid:id="@+id/nameTextbox"/>
The
nameTextbox
name is now a resource ID attached to this element. You can then refer to theTextView
to which the ID is associated in Java:Kotlin
valtextView:TextView? =findViewById(R.id.nameTextbox)
Java
TextViewtextView=findViewById(R.id.nameTextbox);
This code returns the
TextView
object.However, if you have already defined an ID resource, and it isn't already used, then you can apply that ID to a
View
element by excluding the plus symbol in theandroid:id
value.Values for android:layout_height and android:layout_width
The height and width values are expressed using any of the dimension units 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
andViewGroup
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. - example:
- XML file saved at
res/layout/main_activity.xml
:<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextViewandroid:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello,IamaTextView"/> <Buttonandroid:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello,IamaButton"/> </LinearLayout>
This application code loads the layout for an
Activity
in theonCreate()
method: -
Kotlin
publicoverridefunonCreate(savedInstanceState:Bundle?){ super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) }
Java
publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); }
- see also: