Home | History | Annotate | Download | only in resources
      1 page.title=Layout Resource
      2 parent.title=Resource Types
      3 parent.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/>
     22 The 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>
     29 In Java: <code>R.layout.<em>filename</em></code><br/>
     30 In 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
     57 href="#merge-element">{@code &lt;merge&gt;}</a> element, but there must be only
     58 one root element and it must contain the {@code xmlns:android} attribute with the {@code android}
     59 namespace 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
     80 use to obtain a reference to the {@link android.view.ViewGroup} from your application. See more
     81 about 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
     85 dimension value (or <a
     86 href="more-resources.html#Dimension">dimension resource</a>) or a keyword ({@code "fill_parent"}
     87 or {@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
     91 dimension value (or <a
     92 href="more-resources.html#Dimension">dimension resource</a>) or a keyword ({@code "fill_parent"}
     93 or {@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
    102 attributes</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
    113 the <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
    117 a dimension value (or <a
    118 href="more-resources.html#Dimension">dimension resource</a>) or a keyword ({@code "fill_parent"}
    119 or {@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
    123 a dimension value (or <a
    124 href="more-resources.html#Dimension">dimension resource</a>) or a keyword ({@code "fill_parent"}
    125 or {@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
    131 href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a> for more information. For
    132 a 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>&lt;requestFocus&gt;</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>&lt;include&gt;</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
    147 resource.</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
    153 included 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
    157 included 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>&lt;include&gt;</code> that are
    161 supported by the root element in the included layout and they will override those defined in the
    162 root element.</p>
    163 
    164       <p class="caution"><strong>Caution:</strong> If you want to override the layout dimensions,
    165 you must override both <code>android:layout_height</code> and
    166 <code>android:layout_width</code>&mdash;you cannot override only the height or only the width.
    167 If you override only one, it will not take effect. (Other layout properties, such as weight,
    168 are 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
    171 View that consumes no layout space until you explicitly inflate it, at which point, it includes a
    172 layout file defined by its {@code android:layout} attribute. For more information about using {@link
    173 android.view.ViewStub}, read <a href="{@docRoot}resources/articles/layout-tricks-stubs.html">Layout
    174 Tricks: ViewStubs</a>.</p>
    175     </dd>
    176 
    177   <dt id="merge-element"><code>&lt;merge&gt;</code></dt>
    178     <dd>An alternative root element that is not drawn in the layout hierarchy. Using this as the
    179 root element is useful when you know that this layout will be placed into a layout
    180 that already contains the appropriate parent View to contain the children of the
    181 <code>&lt;merge&gt;</code> element. This is particularly useful when you plan to include this layout
    182 in another layout file using <a href="#include-element"><code>&lt;include&gt;</code></a> and
    183 this layout doesn't require a different {@link android.view.ViewGroup} container. For more
    184 information about merging layouts, read <a
    185 href="{@docRoot}resources/articles/layout-tricks-merge.html">Layout
    186 Tricks: 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
    195 plus symbol, {@code +}, indicates that this is a new resource ID and the <code>aapt</code> tool will
    196 create a new resource integer in the {@code R.java} class, if it doesn't already exist. For
    197 example:</p>
    198 <pre>
    199 &lt;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
    202 refer to the {@link android.widget.TextView} to which the ID is associated in Java:</p>
    203 <pre>
    204 findViewById(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
    209 href="{@docRoot}guide/topics/resources/drawable-resource.html#Id">ID resource</a> (and it is not
    210 already used), then you can apply that ID to a {@link android.view.View} element by excluding the
    211 plus 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
    223 deprecate <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}
    237 elements and apply them to your layout the same as a standard layout
    238 element. You can also specify the attributes supported in the XML element. To learn more,
    239 see the <a href="{@docRoot}guide/topics/ui/custom-components.html">Custom Components</a> developer
    240 guide.
    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 &lt;?xml version="1.0" encoding="utf-8"?>
    249 &lt;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     &lt;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     &lt;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 &lt;/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>
    267 public 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>