• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Layout Resource
2parent.title=Resource Types
3parent.link=available-resources.html
4@jd:body
5
6<div id="qv-wrapper">
7  <div id="qv">
8    <h2>See also</h2>
9    <ol>
10      <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout</a></li>
11    </ol>
12  </div>
13</div>
14
15<p>A layout resource defines the architecture for the UI in an Activity or a component of a UI.</p>
16
17
18<dl class="xml">
19
20<dt>file location:</dt>
21<dd><code>res/layout/<em>filename</em>.xml</code><br/>
22The filename will be used as the resource ID.</dd>
23
24<dt>compiled resource datatype:</dt>
25<dd>Resource pointer to a {@link android.view.View} (or subclass) resource.</dd>
26
27<dt>resource reference:</dt>
28<dd>
29In Java: <code>R.layout.<em>filename</em></code><br/>
30In XML: <code>@[<em>package</em>:]layout/<em>filename</em></code>
31</dd>
32
33<dt>syntax:</dt>
34<dd>
35<pre class="stx">
36&lt;?xml version="1.0" encoding="utf-8"?>
37&lt;<a href="#viewgroup-element"><em>ViewGroup</em></a> xmlns:android="http://schemas.android.com/apk/res/android"
38    android:id="@[+][<em>package</em>:]id/<em>resource_name</em>"
39    android:layout_height=["<em>dimension</em>" | "fill_parent" | "wrap_content"]
40    android:layout_width=["<em>dimension</em>" | "fill_parent" | "wrap_content"]
41    [<em>ViewGroup-specific attributes</em>] &gt;
42    &lt;<a href="#view-element"><em>View</em></a>
43        android:id="@[+][<em>package</em>:]id/<em>resource_name</em>"
44        android:layout_height=["<em>dimension</em>" | "fill_parent" | "wrap_content"]
45        android:layout_width=["<em>dimension</em>" | "fill_parent" | "wrap_content"]
46        [<em>View-specific attributes</em>] &gt;
47        &lt;<a href="#requestfocus-element">requestFocus</a>/&gt;
48    &lt;/<em>View</em>&gt;
49    &lt;<a href="#viewgroup-element"><em>ViewGroup</em></a> &gt;
50        &lt;<a href="#view-element"><em>View</em></a> /&gt;
51    &lt;/<em>ViewGroup</em>&gt;
52    &lt;<a href="#include-element">include</a> layout="@layout/<i>layout_resource</i>"/&gt;
53&lt;/<em>ViewGroup</em>&gt;
54</pre>
55<p class="note"><strong>Note:</strong> The root element can be either a
56{@link android.view.ViewGroup}, a {@link android.view.View}, or a <a
57href="#merge-element">{@code &lt;merge&gt;}</a> element, but there must be only
58one root element and it must contain the {@code xmlns:android} attribute with the {@code android}
59namespace as shown.</p>
60</dd>
61
62<dt>elements:</dt>
63<dd>
64  <dl class="tag-list">
65
66  <dt id="viewgroup-element"><code>&lt;ViewGroup&gt;</code></dt>
67    <dd>A container for other {@link android.view.View} elements. There are many
68    different kinds of {@link android.view.ViewGroup} objects and each one lets you
69    specify the layout of the child elements in different ways. Different kinds of
70    {@link android.view.ViewGroup} objects include {@link android.widget.LinearLayout},
71    {@link android.widget.RelativeLayout}, and {@link android.widget.FrameLayout}.
72    <p>You should not assume that any derivation of {@link android.view.ViewGroup}
73    will accept nested {@link android.view.View}s. Some {@link android.view.ViewGroup}s
74    are implementations of the {@link android.widget.AdapterView} class, which determines
75    its children only from an {@link android.widget.Adapter}.</p>
76      <p class="caps">attributes:</p>
77      <dl class="atn-list">
78        <dt><code>android:id</code></dt>
79        <dd><em>Resource ID</em>. A unique resource name for the element, which you can
80use to obtain a reference to the {@link android.view.ViewGroup} from your application. See more
81about the <a href="#idvalue">value for {@code android:id}</a> below.
82        </dd>
83        <dt><code>android:layout_height</code></dt>
84        <dd><em>Dimension or keyword</em>. <strong>Required</strong>. The height for the group, as a
85dimension value (or <a
86href="more-resources.html#Dimension">dimension resource</a>) or a keyword ({@code "fill_parent"}
87or {@code "wrap_content"}). See the <a href="#layoutvalues">valid values</a> below.
88        </dd>
89        <dt><code>android:layout_width</code></dt>
90        <dd><em>Dimension or keyword</em>. <strong>Required</strong>. The width for the group, as a
91dimension value (or <a
92href="more-resources.html#Dimension">dimension resource</a>) or a keyword ({@code "fill_parent"}
93or {@code "wrap_content"}). See the <a href="#layoutvalues">valid values</a> below.
94        </dd>
95      </dl>
96      <p>More attributes are supported by the {@link android.view.ViewGroup}
97      base class, and many more are supported by each implementation of
98      {@link android.view.ViewGroup}. For a reference of all available attributes,
99      see the corresponding reference documentation for the {@link android.view.ViewGroup} class
100(for example, the <a
101      href="{@docRoot}reference/android/widget/LinearLayout.html#lattrs">LinearLayout XML
102attributes</a>).</p>
103    </dd>
104  <dt id="view-element"><code>&lt;View&gt;</code></dt>
105    <dd>An individual UI component, generally referred to as a "widget". Different
106    kinds of {@link android.view.View} objects include {@link android.widget.TextView},
107    {@link android.widget.Button}, and {@link android.widget.CheckBox}.
108      <p class="caps">attributes:</p>
109      <dl class="atn-list">
110        <dt><code>android:id</code></dt>
111        <dd><em>Resource ID</em>. A unique resource name for the element, which you can use to
112          obtain a reference to the {@link android.view.View} from your application. See more about
113the <a href="#idvalue">value for {@code android:id}</a> below.
114        </dd>
115        <dt><code>android:layout_height</code></dt>
116        <dd><em>Dimension or keyword</em>. <strong>Required</strong>. The height for the element, as
117a dimension value (or <a
118href="more-resources.html#Dimension">dimension resource</a>) or a keyword ({@code "fill_parent"}
119or {@code "wrap_content"}). See the <a href="#layoutvalues">valid values</a> below.
120        </dd>
121        <dt><code>android:layout_width</code></dt>
122        <dd><em>Dimension or keyword</em>. <strong>Required</strong>. The width for the element, as
123a dimension value (or <a
124href="more-resources.html#Dimension">dimension resource</a>) or a keyword ({@code "fill_parent"}
125or {@code "wrap_content"}). See the <a href="#layoutvalues">valid values</a> below.
126        </dd>
127      </dl>
128      <p>More attributes are supported by the {@link android.view.View}
129      base class, and many more are supported by each implementation of
130      {@link android.view.View}. Read <a href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring
131      Layout</a> for more information. For a reference of all available attributes,
132      see the corresponding reference documentation (for example, the <a
133      href="{@docRoot}reference/android/widget/TextView.html#lattrs">TextView XML attributes</a>).</p>
134    </dd>
135  <dt id="requestfocus-element"><code>&lt;requestFocus&gt;</code></dt>
136    <dd>Any element representing a {@link android.view.View} object can include this empty element,
137    which gives it's parent initial focus on the screen. You can have only one of these
138    elements per file.</dd>
139
140  <dt id="include-element"><code>&lt;include&gt;</code></dt>
141    <dd>Includes a layout file into this layout.
142      <p class="caps">attributes:</p>
143      <dl class="atn-list">
144        <dt><code>layout</code></dt>
145        <dd><em>Layout resource</em>. <strong>Required</strong>. Reference to a layout
146resource.</dd>
147        <dt><code>android:id</code></dt>
148        <dd><em>Resource ID</em>. Overrides the ID given to the root view in the included layout.
149        </dd>
150        <dt><code>android:layout_height</code></dt>
151        <dd><em>Dimension or keyword</em>. Overrides the height given to the root view in the
152included layout. Only effective if <code>android:layout_width</code> is also declared.
153        </dd>
154        <dt><code>android:layout_width</code></dt>
155        <dd><em>Dimension or keyword</em>. Overrides the width given to the root view in the
156included layout. Only effective if <code>android:layout_height</code> is also declared.
157        </dd>
158      </dl>
159      <p>You can include any other layout attributes in the <code>&lt;include&gt;</code> that are
160supported by the root element in the included layout and they will override those defined in the
161root element.</p>
162
163      <p class="caution"><strong>Caution:</strong> If you want to override the layout dimensions,
164you must override both <code>android:layout_height</code> and
165<code>android:layout_width</code>&mdash;you cannot override only the height or only the width.
166If you override only one, it will not take effect. (Other layout properties, such as weight,
167are still inherited from the source layout.)</p>
168
169    <p>Another way to include a layout is to use {@link android.view.ViewStub}. It is a lightweight
170View that consumes no layout space until you explicitly inflate it, at which point, it includes a
171layout file defined by its {@code android:layout} attribute. For more information about using {@link
172android.view.ViewStub}, read <a href="{@docRoot}resources/articles/layout-tricks-stubs.html">Layout
173Tricks: ViewStubs</a>.</p>
174    </dd>
175
176  <dt id="merge-element"><code>&lt;merge&gt;</code></dt>
177    <dd>An alternative root element that is not drawn in the layout hierarchy. Using this as the
178root element is useful when you know that this layout will be placed into a layout
179that already contains the appropriate parent View to contain the children of the
180<code>&lt;merge&gt;</code> element. This is particularly useful when you plan to include this layout
181in another layout file using <a href="#include-element"><code>&lt;include&gt;</code></a> and
182this layout doesn't require a different {@link android.view.ViewGroup} container. For more
183information about merging layouts, read <a
184href="{@docRoot}resources/articles/layout-tricks-merge.html">Layout
185Tricks: Merging</a>.</dd>
186
187  </dl>
188
189
190
191<h4 id="idvalue">Value for <code>android:id</code></h4>
192
193<p>For the ID value, you should usually use this syntax form: <code>"@+id/<em>name</em>"</code>. The
194plus symbol, {@code +}, indicates that this is a new resource ID and the <code>aapt</code> tool will
195create a new resource integer in the {@code R.java} class, if it doesn't already exist. For
196example:</p>
197<pre>
198&lt;TextView android:id="@+id/nameTextbox"/>
199</pre>
200<p>The <code>nameTextbox</code> name is now a resource ID attached to this element. You can then
201refer to the {@link android.widget.TextView} to which the ID is associated in Java:</p>
202<pre>
203findViewById(R.id.nameTextbox);
204</pre>
205<p>This code returns the {@link android.widget.TextView} object.</p>
206
207<p>However, if you have already defined an <a
208href="{@docRoot}guide/topics/resources/drawable-resource.html#Id">ID resource</a> (and it is not
209already used), then you can apply that ID to a {@link android.view.View} element by excluding the
210plus symbol in the <code>android:id</code> value.</p>
211
212<h4 id="layoutvalues">Value for <code>android:layout_height</code> and
213<code>android:layout_width</code>:</h4>
214
215  <p>The height and width value can be expressed using any of the
216  <a href="more-resources.html#Dimension">dimension
217  units</a> supported by Android (px, dp, sp, pt, in, mm) or with the following keywords:</p>
218  <table><tr><th>Value</th><th>Description</th></tr>
219    <tr>
220      <td><code>match_parent</code></td>
221      <td>Sets the dimension to match that of the parent element. Added in API Level 8 to
222deprecate <code>fill_parent</code>.</td>
223    </tr>
224    <tr>
225      <td><code>fill_parent</code></td>
226      <td>Sets the dimension to match that of the parent element.</td>
227    </tr><tr>
228      <td><code>wrap_content</code></td>
229      <td>Sets the dimension only to the size required to fit the content of this element.</td>
230    </tr>
231  </table>
232
233<h4>Custom View elements</h4>
234
235<p>You can create your own custom {@link android.view.View} and {@link android.view.ViewGroup}
236elements and apply them to your layout the same as a standard layout
237element. You can also specify the attributes supported in the XML element. To learn more,
238read <a href="{@docRoot}guide/topics/ui/custom-components.html">Building Custom Components</a>.
239</p>
240
241</dd> <!-- end  elements and attributes -->
242
243<dt>example:</dt>
244<dd>XML file saved at <code>res/layout/main_activity.xml</code>:
245<pre>
246&lt;?xml version="1.0" encoding="utf-8"?>
247&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
248              android:layout_width="fill_parent"
249              android:layout_height="fill_parent"
250              android:orientation="vertical" >
251    &lt;TextView android:id="@+id/text"
252              android:layout_width="wrap_content"
253              android:layout_height="wrap_content"
254              android:text="Hello, I am a TextView" />
255    &lt;Button android:id="@+id/button"
256            android:layout_width="wrap_content"
257            android:layout_height="wrap_content"
258            android:text="Hello, I am a Button" />
259&lt;/LinearLayout>
260</pre>
261    <p>This application code will load the layout for an {@link android.app.Activity}, in the
262    {@link android.app.Activity#onCreate(Bundle) onCreate()} method:</dt>
263    <dd>
264<pre>
265public void onCreate(Bundle savedInstanceState) {
266    super.onCreate(savedInstanceState);
267    setContentView.(R.layout.main_activity);
268}
269</pre>
270</dd> <!-- end example -->
271
272
273<dt>see also:</dt>
274<dd>
275<ul>
276  <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout</a></li>
277  <li>{@link android.view.View}</li>
278  <li>{@link android.view.ViewGroup}</li>
279</ul>
280</dd>
281
282</dl>