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">XML Layouts</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<?xml version="1.0" encoding="utf-8"?> 37<<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>] > 42 <<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>] > 47 <<a href="#requestfocus-element">requestFocus</a>/> 48 </<em>View</em>> 49 <<a href="#viewgroup-element"><em>ViewGroup</em></a> > 50 <<a href="#view-element"><em>View</em></a> /> 51 </<em>ViewGroup</em>> 52 <<a href="#include-element">include</a> layout="@layout/<i>layout_resource</i>"/> 53</<em>ViewGroup</em>> 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 <merge>}</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><ViewGroup></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><View></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 131href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a> for more information. For 132a reference of all available attributes, 133 see the corresponding reference documentation (for example, the <a 134 href="{@docRoot}reference/android/widget/TextView.html#lattrs">TextView XML attributes</a>).</p> 135 </dd> 136 <dt id="requestfocus-element"><code><requestFocus></code></dt> 137 <dd>Any element representing a {@link android.view.View} object can include this empty element, 138 which gives it's parent initial focus on the screen. You can have only one of these 139 elements per file.</dd> 140 141 <dt id="include-element"><code><include></code></dt> 142 <dd>Includes a layout file into this layout. 143 <p class="caps">attributes:</p> 144 <dl class="atn-list"> 145 <dt><code>layout</code></dt> 146 <dd><em>Layout resource</em>. <strong>Required</strong>. Reference to a layout 147resource.</dd> 148 <dt><code>android:id</code></dt> 149 <dd><em>Resource ID</em>. Overrides the ID given to the root view in the included layout. 150 </dd> 151 <dt><code>android:layout_height</code></dt> 152 <dd><em>Dimension or keyword</em>. Overrides the height given to the root view in the 153included layout. Only effective if <code>android:layout_width</code> is also declared. 154 </dd> 155 <dt><code>android:layout_width</code></dt> 156 <dd><em>Dimension or keyword</em>. Overrides the width given to the root view in the 157included layout. Only effective if <code>android:layout_height</code> is also declared. 158 </dd> 159 </dl> 160 <p>You can include any other layout attributes in the <code><include></code> that are 161supported by the root element in the included layout and they will override those defined in the 162root element.</p> 163 164 <p class="caution"><strong>Caution:</strong> If you want to override the layout dimensions, 165you must override both <code>android:layout_height</code> and 166<code>android:layout_width</code>—you cannot override only the height or only the width. 167If you override only one, it will not take effect. (Other layout properties, such as weight, 168are still inherited from the source layout.)</p> 169 170 <p>Another way to include a layout is to use {@link android.view.ViewStub}. It is a lightweight 171View that consumes no layout space until you explicitly inflate it, at which point, it includes a 172layout file defined by its {@code android:layout} attribute. For more information about using {@link 173android.view.ViewStub}, read <a href="{@docRoot}resources/articles/layout-tricks-stubs.html">Layout 174Tricks: ViewStubs</a>.</p> 175 </dd> 176 177 <dt id="merge-element"><code><merge></code></dt> 178 <dd>An alternative root element that is not drawn in the layout hierarchy. Using this as the 179root element is useful when you know that this layout will be placed into a layout 180that already contains the appropriate parent View to contain the children of the 181<code><merge></code> element. This is particularly useful when you plan to include this layout 182in another layout file using <a href="#include-element"><code><include></code></a> and 183this layout doesn't require a different {@link android.view.ViewGroup} container. For more 184information about merging layouts, read <a 185href="{@docRoot}resources/articles/layout-tricks-merge.html">Layout 186Tricks: Merging</a>.</dd> 187 188 </dl> 189 190 191 192<h4 id="idvalue">Value for <code>android:id</code></h4> 193 194<p>For the ID value, you should usually use this syntax form: <code>"@+id/<em>name</em>"</code>. The 195plus symbol, {@code +}, indicates that this is a new resource ID and the <code>aapt</code> tool will 196create a new resource integer in the {@code R.java} class, if it doesn't already exist. For 197example:</p> 198<pre> 199<TextView android:id="@+id/nameTextbox"/> 200</pre> 201<p>The <code>nameTextbox</code> name is now a resource ID attached to this element. You can then 202refer to the {@link android.widget.TextView} to which the ID is associated in Java:</p> 203<pre> 204findViewById(R.id.nameTextbox); 205</pre> 206<p>This code returns the {@link android.widget.TextView} object.</p> 207 208<p>However, if you have already defined an <a 209href="{@docRoot}guide/topics/resources/drawable-resource.html#Id">ID resource</a> (and it is not 210already used), then you can apply that ID to a {@link android.view.View} element by excluding the 211plus symbol in the <code>android:id</code> value.</p> 212 213<h4 id="layoutvalues">Value for <code>android:layout_height</code> and 214<code>android:layout_width</code>:</h4> 215 216 <p>The height and width value can be expressed using any of the 217 <a href="more-resources.html#Dimension">dimension 218 units</a> supported by Android (px, dp, sp, pt, in, mm) or with the following keywords:</p> 219 <table><tr><th>Value</th><th>Description</th></tr> 220 <tr> 221 <td><code>match_parent</code></td> 222 <td>Sets the dimension to match that of the parent element. Added in API Level 8 to 223deprecate <code>fill_parent</code>.</td> 224 </tr> 225 <tr> 226 <td><code>fill_parent</code></td> 227 <td>Sets the dimension to match that of the parent element.</td> 228 </tr><tr> 229 <td><code>wrap_content</code></td> 230 <td>Sets the dimension only to the size required to fit the content of this element.</td> 231 </tr> 232 </table> 233 234<h4>Custom View elements</h4> 235 236<p>You can create your own custom {@link android.view.View} and {@link android.view.ViewGroup} 237elements and apply them to your layout the same as a standard layout 238element. You can also specify the attributes supported in the XML element. To learn more, 239see the <a href="{@docRoot}guide/topics/ui/custom-components.html">Custom Components</a> developer 240guide. 241</p> 242 243</dd> <!-- end elements and attributes --> 244 245<dt>example:</dt> 246<dd>XML file saved at <code>res/layout/main_activity.xml</code>: 247<pre> 248<?xml version="1.0" encoding="utf-8"?> 249<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 250 android:layout_width="fill_parent" 251 android:layout_height="fill_parent" 252 android:orientation="vertical" > 253 <TextView android:id="@+id/text" 254 android:layout_width="wrap_content" 255 android:layout_height="wrap_content" 256 android:text="Hello, I am a TextView" /> 257 <Button android:id="@+id/button" 258 android:layout_width="wrap_content" 259 android:layout_height="wrap_content" 260 android:text="Hello, I am a Button" /> 261</LinearLayout> 262</pre> 263 <p>This application code will load the layout for an {@link android.app.Activity}, in the 264 {@link android.app.Activity#onCreate(Bundle) onCreate()} method:</dt> 265 <dd> 266<pre> 267public void onCreate(Bundle savedInstanceState) { 268 super.onCreate(savedInstanceState); 269 setContentView.(R.layout.main_activity); 270} 271</pre> 272</dd> <!-- end example --> 273 274 275<dt>see also:</dt> 276<dd> 277<ul> 278 <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a></li> 279 <li>{@link android.view.View}</li> 280 <li>{@link android.view.ViewGroup}</li> 281</ul> 282</dd> 283 284</dl>