declaring-layout.jd revision 1318af1a476bb39b80fcadf5e545856aa2e90de2
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpage.title=Declaring Layout
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectparent.title=User Interface
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectparent.link=index.html
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@jd:body
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<div id="qv-wrapper">
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<div id="qv">
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  <h2>In this document</h2>
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  <ol>
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    <li><a href="#write">Write the XML</a></li>
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    <li><a href="#load">Load the XML Resource</a></li>
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    <li><a href="#attributes">Attributes</a>
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      <ol>
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        <li><a href="#id">ID</a></li>
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        <li><a href="#layout-params">Layout Parameters</a></li>
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      </ol>
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    </li>
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    <li><a href="#Position">Position</a></li>
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    <li><a href="#SizePaddingMargin">Size, Padding and Margins</a></li>
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    <li><a href="#example">Example Layout</a></li>
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  </ol>
22bf15ce6de461ba5d2a3d823a2445155dc4e4dee9Dirk Dougherty
23ec80d7f311b1a0899bb4caf5b380b07027e902d1Scott Main  <h2>Key classes</h2>
24ec80d7f311b1a0899bb4caf5b380b07027e902d1Scott Main  <ol>
25ec80d7f311b1a0899bb4caf5b380b07027e902d1Scott Main    <li>{@link android.view.View}</li>
26ec80d7f311b1a0899bb4caf5b380b07027e902d1Scott Main    <li>{@link android.view.ViewGroup}</li>
27ec80d7f311b1a0899bb4caf5b380b07027e902d1Scott Main    <li>{@link android.view.ViewGroup.LayoutParams}</li>
28ec80d7f311b1a0899bb4caf5b380b07027e902d1Scott Main  </ol>
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</div>
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</div>
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>Your layout is the architecture for the user interface in an Activity.
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIt defines the layout structure and holds all the elements that appear to the user. 
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectYou can declare your layout in two ways:</p>
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<ul>
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<li><strong>Declare UI elements in XML</strong>. Android provides a straightforward XML 
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvocabulary that corresponds to the View classes and subclasses, such as those for widgets and layouts.</li>
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<li><strong>Instantiate layout elements at runtime</strong>. Your 
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectapplication can create View and ViewGroup objects (and manipulate their properties) programmatically. </li>
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</ul>
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>The Android framework gives you the flexibility to use either or both of these methods for declaring and managing your application's UI. For example, you could declare your application's default layouts in XML, including the screen elements that will appear in them and their properties. You could then add code in your application that would modify the state of the screen objects, including those declared in XML, at run time. </p>
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
443b3145ed6c23d99ccf6ab559552399148a5a59c9Scott Main<div class="sidebox-wrapper">
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<div class="sidebox">
46bf15ce6de461ba5d2a3d823a2445155dc4e4dee9Dirk Dougherty  <ul>
47bf15ce6de461ba5d2a3d823a2445155dc4e4dee9Dirk Dougherty  <li>The <a href="{@docRoot}sdk/eclipse-adt.html">ADT
48bf15ce6de461ba5d2a3d823a2445155dc4e4dee9Dirk Dougherty  Plugin for Eclipse</a> offers a layout preview of your XML &mdash; 
49bf15ce6de461ba5d2a3d823a2445155dc4e4dee9Dirk Dougherty  with the XML file opened, select the <strong>Layout</strong> tab.</li>
50bf15ce6de461ba5d2a3d823a2445155dc4e4dee9Dirk Dougherty  <li>You should also try the 
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  <a href="{@docRoot}guide/developing/tools/hierarchy-viewer.html">Hierarchy Viewer</a> tool, 
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  for debugging layouts &mdash; it reveals layout property values, 
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  draws wireframes with padding/margin indicators, and full rendered views while 
54bf15ce6de461ba5d2a3d823a2445155dc4e4dee9Dirk Dougherty  you debug on the emulator or device.</li>
55bf15ce6de461ba5d2a3d823a2445155dc4e4dee9Dirk Dougherty  <li>The <a href="{@docRoot}guide/developing/tools/layoutopt.html">layoutopt</a> tool lets
56bf15ce6de461ba5d2a3d823a2445155dc4e4dee9Dirk Dougherty  you quickly analyze your layouts and hierarchies for inefficiencies or other problems.</li>
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</div>
583b3145ed6c23d99ccf6ab559552399148a5a59c9Scott Main</div>
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>The advantage to declaring your UI in XML is that it enables you to better separate the presentation of your application from the code that controls its behavior. Your UI descriptions are external to your application code, which means that you can modify or adapt it without having to modify your source code and recompile. For example, you can create XML layouts for different screen orientations, different device screen sizes, and different languages. Additionally, declaring the layout in XML makes it easier to visualize the structure of your UI, so it's easier to debug problems. As such, this document focuses on teaching you how to declare your layout in XML. If you're
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinterested in instantiating View objects at runtime, refer to the {@link android.view.ViewGroup} and 
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{@link android.view.View} class references.</p>
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>In general, the XML vocabulary for declaring UI elements closely follows the structure and naming of the classes and methods, where element names correspond to class names and attribute names correspond to methods. In fact, the correspondence is often so direct that you can guess what XML attribute corresponds to a class method, or guess what class corresponds to a given xml element. However, note that not all vocabulary is identical. In some cases, there are slight naming differences. For
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectexample, the EditText element has a <code>text</code> attribute that corresponds to
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code>EditText.setText()</code>. </p>
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p class="note"><strong>Tip:</strong> Learn more about different layout types in <a href="{@docRoot}guide/topics/ui/layout-objects.html">Common
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectLayout Objects</a>. There are also a collection of tutorials on building various layouts in the
7022558d0be8210aee1a2ab64b374bb357d4123acdDirk Dougherty<a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a> tutorial guide.</p>
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<h2 id="write">Write the XML</h2>
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
743b3145ed6c23d99ccf6ab559552399148a5a59c9Scott Main<div class="sidebox-wrapper">
753b3145ed6c23d99ccf6ab559552399148a5a59c9Scott Main<div class="sidebox">
763b3145ed6c23d99ccf6ab559552399148a5a59c9Scott Main<p>For your convenience, the API reference documentation for UI related classes
773b3145ed6c23d99ccf6ab559552399148a5a59c9Scott Mainlists the available XML attributes that correspond to the class methods, including inherited
783b3145ed6c23d99ccf6ab559552399148a5a59c9Scott Mainattributes.</p>
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>To learn more about the available XML elements and attributes, as well as the format of the XML file, see <a
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecthref="{@docRoot}guide/topics/resources/available-resources.html#layoutresources">Layout Resources</a>.</p>
813b3145ed6c23d99ccf6ab559552399148a5a59c9Scott Main</div>
823b3145ed6c23d99ccf6ab559552399148a5a59c9Scott Main</div>
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>Using Android's XML vocabulary, you can quickly design UI layouts and the screen elements they contain, in the same way you create web pages in HTML &mdash; with a series of nested elements. </p>
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>Each layout file must contain exactly one root element, which must be a View or ViewGroup object. Once you've defined the root element, you can add additional layout objects or widgets as child elements to gradually build a View hierarchy that defines your layout. For example, here's an XML layout that uses a vertical {@link android.widget.LinearLayout}
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectto hold a {@link android.widget.TextView} and a {@link android.widget.Button}:</p>
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<pre>
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project&lt;?xml version="1.0" encoding="utf-8"?>
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project              android:layout_width="fill_parent" 
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project              android:layout_height="fill_parent" 
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project              android:orientation="vertical" >
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    &lt;TextView android:id="@+id/text"
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project              android:layout_width="wrap_content"
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project              android:layout_height="wrap_content"
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project              android:text="Hello, I am a TextView" />
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    &lt;Button android:id="@+id/button"
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            android:layout_width="wrap_content"
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            android:layout_height="wrap_content"
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            android:text="Hello, I am a Button" />
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project&lt;/LinearLayout>
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</pre>
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>After you've declared your layout in XML, save the file with the <code>.xml</code> extension, 
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectin your Android project's <code>res/layout/</code> directory, so it will properly compile. </p>
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>We'll discuss each of the attributes shown here a little later.</p>
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<h2 id="load">Load the XML Resource</h2>
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>When you compile your application, each XML layout file is compiled into a
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{@link android.view.View} resource. You should load the layout resource from your application code, in your 
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()} callback implementation.
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectDo so by calling <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>, 
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpassing it the reference to your layout resource in the form of: 
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code>R.layout.<em>layout_file_name</em></code>  
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectFor example, if your XML layout is saved as <code>main_layout.xml</code>, you would load it
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectfor your Activity like so:</p>
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<pre>
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic void onCreate(Bundle savedInstanceState) {
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    super.onCreate(savedInstanceState);
1231318af1a476bb39b80fcadf5e545856aa2e90de2Jesse Wilson    setContentView(R.layout.main_layout);
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</pre>
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>The <code>onCreate()</code> callback method in your Activity is called by the Android framework when
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectyour Activity is launched (see the discussion on Lifecycles, in the 
1297f877069274c94b373478a8d0c969c9cfd93864fElliott Hughes<a href="{@docRoot}guide/topics/fundamentals.html#lcycles">Application Fundamentals</a>, for more on this).</p>
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<h2 id="attributes">Attributes</h2>
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>Every View and ViewGroup object supports their own variety of XML attributes.
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectSome attributes are specific to a View object (for example, TextView supports the <code>textSize</code>
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectattribute), but these attributes are also inherited by any View objects that may extend this class.
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectSome are common to all View objects, because they are inherited from the root View class (like 
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectthe <code>id</code> attribute). And, other attributes are considered "layout parameters," which are 
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectattributes that describe certain layout orientations of the View object, as defined by that object's
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectparent ViewGroup object.</p>
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<h3 id="id">ID</h3>
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>Any View object may have an integer ID associated with it, to uniquely identify the View within the tree.
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectWhen the application is compiled, this ID is referenced as an integer, but the ID is typically 
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectassigned in the layout XML file as a string, in the <code>id</code> attribute.
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThis is an XML attribute common to all View objects
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project(defined by the {@link android.view.View} class) and you will use it very often. 
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThe syntax for an ID, inside an XML tag is:</p>
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<pre>android:id="&#64;+id/my_button"</pre>
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>The  at-symbol (&#64;) at the beginning of the string indicates that the XML parser should parse and expand the rest
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectof the ID string and identify it as an ID resource. The plus-symbol (+) means that this is a new resource name that must
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbe created and added to our resources (in the <code>R.java</code> file). There are a number of other ID resources that
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectare offered by the Android framework. When referencing an Android resource ID, you do not need the plus-symbol,
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbut must add the <code>android</code> package namespace, like so:</p>
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<pre>android:id="&#64;android:id/empty"</pre>
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>With the <code>android</code> package namespace in place, we're now referencing an ID from the <code>android.R</code>
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectresources class, rather than the local resources class.</p>
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>In order to create views and reference them from the application, a common pattern is to:</p>
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<ol>
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  <li>Define a view/widget in the layout file and assign it a unique ID:
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<pre>
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project&lt;Button android:id="&#64;+id/my_button"
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        android:layout_width="wrap_content"
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        android:layout_height="wrap_content"
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        android:text="&#64;string/my_button_text"/>
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</pre>
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  </li>
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  <li>Then create an instance of the view object and capture it from the layout 
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project(typically in the <code>{@link android.app.Activity#onCreate(Bundle) onCreate()}</code> method):
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<pre>
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectButton myButton = (Button) findViewById(R.id.my_button);
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</pre>
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  </li>
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</ol>
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>Defining IDs for view objects is important when creating a {@link android.widget.RelativeLayout}.
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIn a relative layout, sibling views can define their layout relative to another sibling view, 
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectwhich is referenced by the unique ID.</p>
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>An ID need not be unique throughout the entire tree, but it should be
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectunique within the part of the tree you are searching (which may often be the entire tree, so it's best 
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectto be completely unique when possible).</p>
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<h3 id="layout-params">Layout Parameters</h3>
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>XML layout attributes named <code>layout_<em>something</em></code> define 
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectlayout parameters for the View that are appropriate for the ViewGroup in which it resides.</p>
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>Every ViewGroup class implements a nested class that extends {@link
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid.view.ViewGroup.LayoutParams}. This subclass
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectcontains property types that define the size and position for each child view, as
19418439bee6f8b525abe3f1fac69bc4cea184e1565Scott Mainappropriate for the view group. As you can see in figure 1, the parent
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectview group defines layout parameters for each child view (including the child view group).</p>
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<img src="{@docRoot}images/layoutparams.png" alt="" height="300" align="center"/>
19818439bee6f8b525abe3f1fac69bc4cea184e1565Scott Main<p class="img-caption"><strong>Figure 1.</strong> Visualization of a view hierarchy with layout
19918439bee6f8b525abe3f1fac69bc4cea184e1565Scott Mainparameters associated with each view.</p>
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>Note that every LayoutParams subclass has its own syntax for setting
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvalues. Each child element must define LayoutParams that are appropriate for its parent, 
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectthough it may also define different LayoutParams for its own children. </p>
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2053d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty<p>All view groups include a width and height (<code>layout_width</code> and
2063d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty<code>layout_height</code>), and each view is required to define them. Many
2073d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk DoughertyLayoutParams also include optional margins and borders. <p>
2083d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty
2093d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty<p>You can specify width and height with exact measurements, though you probably
2103d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Doughertywon't want to do this often. More often, you will use one of these constants to
2113d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Doughertyset the width or height: </p>
2123d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty
2133d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty<ul>
2143d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty  <li><var>wrap_content</var> tells your view to size itself to the dimensions
2153d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Doughertyrequired by its content</li>
2163d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty  <li><var>fill_parent</var> (renamed <var>match_parent</var> in API Level 8)
2173d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Doughertytells your view to become as big as its parent view group will allow.</li>
2183d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty</ul>
2193d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty
2203d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty<p>In general, specifying a layout width and height using absolute units such as
2213d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Doughertypixels is not recommended. Instead, using relative measurements such as
2223d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Doughertydensity-independent pixel units (<var>dp</var>), <var>wrap_content</var>, or
2233d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty<var>fill_parent</var>, is a better approach, because it helps ensure that
2243d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Doughertyyour application will display properly across a variety of device screen sizes.
2253d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk DoughertyThe accepted measurement types are defined in the
2263d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk Dougherty<a href="{@docRoot}guide/topics/resources/available-resources.html#dimension">
2273d5f648f8fe61507107b900fc3c4cf79b19572c6Dirk DoughertyAvailable Resources</a> document.</p>
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<h2 id="Position">Layout Position</h2>
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   <p>
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   The geometry of a view is that of a rectangle. A view has a location,
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   expressed as a pair of <em>left</em> and <em>top</em> coordinates, and
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   two dimensions, expressed as a width and a height. The unit for location
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   and dimensions is the pixel.
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   </p>
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   <p>
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   It is possible to retrieve the location of a view by invoking the methods
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   {@link android.view.View#getLeft()} and {@link android.view.View#getTop()}. The former returns the left, or X,
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   coordinate of the rectangle representing the view. The latter returns the
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   top, or Y, coordinate of the rectangle representing the view. These methods
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   both return the location of the view relative to its parent. For instance,
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   when getLeft() returns 20, that means the view is located 20 pixels to the
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   right of the left edge of its direct parent.
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   </p>
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   <p>
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   In addition, several convenience methods are offered to avoid unnecessary
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   computations, namely {@link android.view.View#getRight()} and {@link android.view.View#getBottom()}.
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   These methods return the coordinates of the right and bottom edges of the
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   rectangle representing the view. For instance, calling {@link android.view.View#getRight()}
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   is similar to the following computation: <code>getLeft() + getWidth()</code>.
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   </p>
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<h2 id="SizePaddingMargins">Size, Padding and Margins</h2>
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   <p>
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   The size of a view is expressed with a width and a height. A view actually
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   possess two pairs of width and height values.
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   </p>
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   <p>
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   The first pair is known as <em>measured width</em> and
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   <em>measured height</em>. These dimensions define how big a view wants to be
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   within its parent. The
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   measured dimensions can be obtained by calling {@link android.view.View#getMeasuredWidth()}
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   and {@link android.view.View#getMeasuredHeight()}.
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   </p>
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   <p>
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   The second pair is simply known as <em>width</em> and <em>height</em>, or
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   sometimes <em>drawing width</em> and <em>drawing height</em>. These
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   dimensions define the actual size of the view on screen, at drawing time and
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   after layout. These values may, but do not have to, be different from the
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   measured width and height. The width and height can be obtained by calling
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   {@link android.view.View#getWidth()} and {@link android.view.View#getHeight()}. 
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   </p>
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   <p>
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   To measure its dimensions, a view takes into account its padding. The padding
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   is expressed in pixels for the left, top, right and bottom parts of the view.
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   Padding can be used to offset the content of the view by a specific amount of
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   pixels. For instance, a left padding of 2 will push the view's content by
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   2 pixels to the right of the left edge. Padding can be set using the
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   {@link android.view.View#setPadding(int, int, int, int)} method and queried by calling
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   {@link android.view.View#getPaddingLeft()}, {@link android.view.View#getPaddingTop()},
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   {@link android.view.View#getPaddingRight()} and {@link android.view.View#getPaddingBottom()}.  
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   </p>
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   <p>
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   Even though a view can define a padding, it does not provide any support for
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   margins. However, view groups provide such a support. Refer to
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   {@link android.view.ViewGroup} and
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   {@link android.view.ViewGroup.MarginLayoutParams} for further information.
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   </p>
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>For more information about dimensions, see <a href="{@docRoot}guide/topics/resources/available-resources.html#dimension">Dimension Values</a>.</p>
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project   
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
303