page.title=Layouts
page.tags=view,viewgroup
@jd:body

<div id="qv-wrapper">
<div id="qv">
  <h2>In this document</h2>
<ol>
  <li><a href="#write">Write the XML</a></li>
  <li><a href="#load">Load the XML Resource</a></li>
  <li><a href="#attributes">Attributes</a>
    <ol>
      <li><a href="#id">ID</a></li>
      <li><a href="#layout-params">Layout Parameters</a></li>
    </ol>
  </li>
  <li><a href="#Position">Layout Position</a></li>
  <li><a href="#SizePaddingMargins">Size, Padding and Margins</a></li>
  <li><a href="#CommonLayouts">Common Layouts</a></li>
  <li><a href="#AdapterViews">Building Layouts with an Adapter</a>
    <ol>
      <li><a href="#FillingTheLayout">Filling an adapter view with data</a></li>
      <li><a href="#HandlingUserSelections">Handling click events</a></li>
    </ol>
  </li>
</ol>

  <h2>Key classes</h2>
  <ol>
    <li>{@link android.view.View}</li>
    <li>{@link android.view.ViewGroup}</li>
    <li>{@link android.view.ViewGroup.LayoutParams}</li>
  </ol>
  
  <h2>See also</h2>
  <ol>
    <li><a href="{@docRoot}training/basics/firstapp/building-ui.html">Building a Simple User
Interface</a></li> </div>
</div>

<p>A layout defines the visual structure for a user interface, such as the UI for an <a
href="{@docRoot}guide/components/activities.html">activity</a> or <a
href="{@docRoot}guide/topics/appwidgets/index.html">app widget</a>.
You can declare a layout in two ways:</p>
<ul>
<li><strong>Declare UI elements in XML</strong>. Android provides a straightforward XML 
vocabulary that corresponds to the View classes and subclasses, such as those for widgets and layouts.</li>
<li><strong>Instantiate layout elements at runtime</strong>. Your 
application can create View and ViewGroup objects (and manipulate their properties) programmatically. </li>
</ul>

<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>

<div class="sidebox-wrapper">
<div class="sidebox">
  <ul>
  <li>The <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT
  Plugin for Eclipse</a> offers a layout preview of your XML &mdash; 
  with the XML file opened, select the <strong>Layout</strong> tab.</li>
  <li>You should also try the 
  <a href="{@docRoot}tools/debugging/debugging-ui.html#hierarchyViewer">Hierarchy Viewer</a> tool, 
  for debugging layouts &mdash; it reveals layout property values, 
  draws wireframes with padding/margin indicators, and full rendered views while 
  you debug on the emulator or device.</li>
  <li>The <a href="{@docRoot}tools/debugging/debugging-ui.html#layoutopt">layoutopt</a> tool lets
  you quickly analyze your layouts and hierarchies for inefficiencies or other problems.</li>
</div>
</div>

<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
interested in instantiating View objects at runtime, refer to the {@link android.view.ViewGroup} and 
{@link android.view.View} class references.</p>

<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
example, the EditText element has a <code>text</code> attribute that corresponds to
<code>EditText.setText()</code>. </p>

<p class="note"><strong>Tip:</strong> Learn more about different layout types in <a href="{@docRoot}guide/topics/ui/layout-objects.html">Common
Layout Objects</a>. There are also a collection of tutorials on building various layouts in the
<a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a> tutorial guide.</p>

<h2 id="write">Write the XML</h2>

<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>

<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}
to hold a {@link android.widget.TextView} and a {@link android.widget.Button}:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent" 
              android:layout_height="fill_parent" 
              android:orientation="vertical" >
    &lt;TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    &lt;Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
&lt;/LinearLayout>
</pre>

<p>After you've declared your layout in XML, save the file with the <code>.xml</code> extension, 
in your Android project's <code>res/layout/</code> directory, so it will properly compile. </p>

<p>More information about the syntax for a layout XML file is available in the <a
href="{@docRoot}guide/topics/resources/layout-resource.html">Layout Resources</a> document.</p>

<h2 id="load">Load the XML Resource</h2>

<p>When you compile your application, each XML layout file is compiled into a
{@link android.view.View} resource. You should load the layout resource from your application code, in your 
{@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()} callback implementation.
Do so by calling <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>, 
passing it the reference to your layout resource in the form of: 
<code>R.layout.<em>layout_file_name</em></code>  
For example, if your XML layout is saved as <code>main_layout.xml</code>, you would load it
for your Activity like so:</p>
<pre>
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
}
</pre>

<p>The <code>onCreate()</code> callback method in your Activity is called by the Android framework when
your Activity is launched (see the discussion about lifecycles, in the 
<a href="{@docRoot}guide/components/activities.html#Lifecycle">Activities</a>
document).</p>


<h2 id="attributes">Attributes</h2>

<p>Every View and ViewGroup object supports their own variety of XML attributes.
Some attributes are specific to a View object (for example, TextView supports the <code>textSize</code>
attribute), but these attributes are also inherited by any View objects that may extend this class.
Some are common to all View objects, because they are inherited from the root View class (like 
the <code>id</code> attribute). And, other attributes are considered "layout parameters," which are 
attributes that describe certain layout orientations of the View object, as defined by that object's
parent ViewGroup object.</p>

<h3 id="id">ID</h3>

<p>Any View object may have an integer ID associated with it, to uniquely identify the View within the tree.
When the application is compiled, this ID is referenced as an integer, but the ID is typically 
assigned in the layout XML file as a string, in the <code>id</code> attribute.
This is an XML attribute common to all View objects
(defined by the {@link android.view.View} class) and you will use it very often. 
The syntax for an ID, inside an XML tag is:</p>
<pre>android:id="&#64;+id/my_button"</pre>

<p>The  at-symbol (&#64;) at the beginning of the string indicates that the XML parser should parse and expand the rest
of the ID string and identify it as an ID resource. The plus-symbol (+) means that this is a new resource name that must
be created and added to our resources (in the <code>R.java</code> file). There are a number of other ID resources that
are offered by the Android framework. When referencing an Android resource ID, you do not need the plus-symbol,
but must add the <code>android</code> package namespace, like so:</p>
<pre>android:id="&#64;android:id/empty"</pre>
<p>With the <code>android</code> package namespace in place, we're now referencing an ID from the <code>android.R</code>
resources class, rather than the local resources class.</p>

<p>In order to create views and reference them from the application, a common pattern is to:</p>
<ol>
  <li>Define a view/widget in the layout file and assign it a unique ID:
<pre>
&lt;Button android:id="&#64;+id/my_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="&#64;string/my_button_text"/>
</pre>
  </li>
  <li>Then create an instance of the view object and capture it from the layout 
(typically in the <code>{@link android.app.Activity#onCreate(Bundle) onCreate()}</code> method):
<pre>
Button myButton = (Button) findViewById(R.id.my_button);
</pre>
  </li>
</ol>
<p>Defining IDs for view objects is important when creating a {@link android.widget.RelativeLayout}.
In a relative layout, sibling views can define their layout relative to another sibling view, 
which is referenced by the unique ID.</p>
<p>An ID need not be unique throughout the entire tree, but it should be
unique within the part of the tree you are searching (which may often be the entire tree, so it's best 
to be completely unique when possible).</p>


<h3 id="layout-params">Layout Parameters</h3>

<p>XML layout attributes named <code>layout_<em>something</em></code> define 
layout parameters for the View that are appropriate for the ViewGroup in which it resides.</p>

<p>Every ViewGroup class implements a nested class that extends {@link
android.view.ViewGroup.LayoutParams}. This subclass
contains property types that define the size and position for each child view, as
appropriate for the view group. As you can see in figure 1, the parent
view group defines layout parameters for each child view (including the child view group).</p>

<img src="{@docRoot}images/layoutparams.png" alt="" />
<p class="img-caption"><strong>Figure 1.</strong> Visualization of a view hierarchy with layout
parameters associated with each view.</p>

<p>Note that every LayoutParams subclass has its own syntax for setting
values. Each child element must define LayoutParams that are appropriate for its parent, 
though it may also define different LayoutParams for its own children. </p>

<p>All view groups include a width and height (<code>layout_width</code> and
<code>layout_height</code>), and each view is required to define them. Many
LayoutParams also include optional margins and borders. <p>

<p>You can specify width and height with exact measurements, though you probably
won't want to do this often. More often, you will use one of these constants to
set the width or height: </p>

<ul>
  <li><var>wrap_content</var> tells your view to size itself to the dimensions
required by its content</li>
  <li><var>fill_parent</var> (renamed <var>match_parent</var> in API Level 8)
tells your view to become as big as its parent view group will allow.</li>
</ul>

<p>In general, specifying a layout width and height using absolute units such as
pixels is not recommended. Instead, using relative measurements such as
density-independent pixel units (<var>dp</var>), <var>wrap_content</var>, or
<var>fill_parent</var>, is a better approach, because it helps ensure that
your application will display properly across a variety of device screen sizes.
The accepted measurement types are defined in the
<a href="{@docRoot}guide/topics/resources/available-resources.html#dimension">
Available Resources</a> document.</p>


<h2 id="Position">Layout Position</h2>
   <p>
   The geometry of a view is that of a rectangle. A view has a location,
   expressed as a pair of <em>left</em> and <em>top</em> coordinates, and
   two dimensions, expressed as a width and a height. The unit for location
   and dimensions is the pixel.
   </p>
  
   <p>
   It is possible to retrieve the location of a view by invoking the methods
   {@link android.view.View#getLeft()} and {@link android.view.View#getTop()}. The former returns the left, or X,
   coordinate of the rectangle representing the view. The latter returns the
   top, or Y, coordinate of the rectangle representing the view. These methods
   both return the location of the view relative to its parent. For instance,
   when getLeft() returns 20, that means the view is located 20 pixels to the
   right of the left edge of its direct parent.
   </p>
  
   <p>
   In addition, several convenience methods are offered to avoid unnecessary
   computations, namely {@link android.view.View#getRight()} and {@link android.view.View#getBottom()}.
   These methods return the coordinates of the right and bottom edges of the
   rectangle representing the view. For instance, calling {@link android.view.View#getRight()}
   is similar to the following computation: <code>getLeft() + getWidth()</code>.
   </p>
   

<h2 id="SizePaddingMargins">Size, Padding and Margins</h2>
   <p>
   The size of a view is expressed with a width and a height. A view actually
   possess two pairs of width and height values.
   </p>
  
   <p>
   The first pair is known as <em>measured width</em> and
   <em>measured height</em>. These dimensions define how big a view wants to be
   within its parent. The
   measured dimensions can be obtained by calling {@link android.view.View#getMeasuredWidth()}
   and {@link android.view.View#getMeasuredHeight()}.
   </p>
  
   <p>
   The second pair is simply known as <em>width</em> and <em>height</em>, or
   sometimes <em>drawing width</em> and <em>drawing height</em>. These
   dimensions define the actual size of the view on screen, at drawing time and
   after layout. These values may, but do not have to, be different from the
   measured width and height. The width and height can be obtained by calling
   {@link android.view.View#getWidth()} and {@link android.view.View#getHeight()}. 
   </p>
  
   <p>
   To measure its dimensions, a view takes into account its padding. The padding
   is expressed in pixels for the left, top, right and bottom parts of the view.
   Padding can be used to offset the content of the view by a specific amount of
   pixels. For instance, a left padding of 2 will push the view's content by
   2 pixels to the right of the left edge. Padding can be set using the
   {@link android.view.View#setPadding(int, int, int, int)} method and queried by calling
   {@link android.view.View#getPaddingLeft()}, {@link android.view.View#getPaddingTop()},
   {@link android.view.View#getPaddingRight()} and {@link android.view.View#getPaddingBottom()}.  
   </p>
  
   <p>
   Even though a view can define a padding, it does not provide any support for
   margins. However, view groups provide such a support. Refer to
   {@link android.view.ViewGroup} and
   {@link android.view.ViewGroup.MarginLayoutParams} for further information.
   </p>

   <p>For more information about dimensions, see 
   <a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">Dimension Values</a>.
   </p>
   

   
   


<style type="text/css">
div.layout {
  float:left;
  width:200px;
  margin:0 0 20px 20px;
}
div.layout.first {
  margin-left:0;
  clear:left;
}
</style>




<h2 id="CommonLayouts">Common Layouts</h2>

<p>Each subclass of the {@link android.view.ViewGroup} class provides a unique way to display
the views you nest within it. Below are some of the more common layout types that are built
into the Android platform.</p>

<p class="note"><strong>Note:</strong> Although you can nest one or more layouts within another
layout to acheive your UI design, you should strive to keep your layout hierarchy as shallow as
possible. Your layout draws faster if it has fewer nested layouts (a wide view hierarchy is
better than a deep view hierarchy).</p>

<!-- 
<h2 id="framelayout">FrameLayout</h2>
<p>{@link android.widget.FrameLayout FrameLayout} is the simplest type of layout
object. It's basically a blank space on your screen that you can
later fill with a single object &mdash; for example, a picture that you'll swap in and out.
All child elements of the FrameLayout are pinned to the top left corner of the screen; you cannot
specify a different location for a child view. Subsequent child views will simply be drawn over
previous ones,
partially or totally obscuring them (unless the newer object is transparent).
</p>
-->


<div class="layout first">
  <h4><a href="layout/linear.html">Linear Layout</a></h4>
  <a href="layout/linear.html"><img src="{@docRoot}images/ui/linearlayout-small.png" alt="" /></a>
  <p>A layout that organizes its children into a single horizontal or vertical row. It
  creates a scrollbar if the length of the window exceeds the length of the screen.</p>
</div>

<div class="layout">
  <h4><a href="layout/relative.html">Relative Layout</a></h4>
  <a href="layout/relative.html"><img src="{@docRoot}images/ui/relativelayout-small.png" alt=""
/></a>
  <p>Enables you to specify the location of child objects relative to each other (child A to
the left of child B) or to the parent (aligned to the top of the parent).</p>
</div>

<div class="layout">
  <h4><a href="{@docRoot}guide/webapps/webview.html">Web View</a></h4>
  <a href="{@docRoot}guide/webapps/webview.html"><img src="{@docRoot}images/ui/webview-small.png"
alt="" /></a>
  <p>Displays web pages.</p>
</div>




<h2 id="AdapterViews" style="clear:left">Building Layouts with an Adapter</h2>

<p>When the content for your layout is dynamic or not pre-determined, you can use a layout that
subclasses {@link android.widget.AdapterView} to populate the layout with views at runtime. A
subclass of the {@link android.widget.AdapterView} class uses an {@link android.widget.Adapter} to
bind data to its layout. The {@link android.widget.Adapter} behaves as a middle-man between the data
source and the {@link android.widget.AdapterView} layout&mdash;the {@link android.widget.Adapter}
retrieves the data (from a source such as an array or a database query) and converts each entry
into a view that can be added into the {@link android.widget.AdapterView} layout.</p>

<p>Common layouts backed by an adapter include:</p>

<div class="layout first">
  <h4><a href="layout/listview.html">List View</a></h4>
  <a href="layout/listview.html"><img src="{@docRoot}images/ui/listview-small.png" alt="" /></a>
  <p>Displays a scrolling single column list.</p>
</div>

<div class="layout">
  <h4><a href="layout/gridview.html">Grid View</a></h4>
  <a href="layout/gridview.html"><img src="{@docRoot}images/ui/gridview-small.png" alt="" /></a>
  <p>Displays a scrolling grid of columns and rows.</p>
</div>



<h3 id="FillingTheLayout" style="clear:left">Filling an adapter view with data</h3>

<p>You can populate an {@link android.widget.AdapterView} such as {@link android.widget.ListView} or
{@link android.widget.GridView} by binding the {@link android.widget.AdapterView} instance to an
{@link android.widget.Adapter}, which retrieves data from an external source and creates a {@link
android.view.View} that represents each data entry.</p>

<p>Android provides several subclasses of {@link android.widget.Adapter} that are useful for
retrieving different kinds of data and building views for an {@link android.widget.AdapterView}. The
two most common adapters are:</p>

<dl>
  <dt>{@link android.widget.ArrayAdapter}</dt>
    <dd>Use this adapter when your data source is an array. By default, {@link
android.widget.ArrayAdapter} creates a view for each array item by calling {@link
java.lang.Object#toString()} on each item and placing the contents in a {@link
android.widget.TextView}.
      <p>For example, if you have an array of strings you want to display in a {@link
android.widget.ListView}, initialize a new {@link android.widget.ArrayAdapter} using a
constructor to specify the layout for each string and the string array:</p>
<pre>
ArrayAdapter adapter = new ArrayAdapter&lt;String>(this, 
        android.R.layout.simple_list_item_1, myStringArray);
</pre>
<p>The arguments for this constructor are:</p>
<ul>
  <li>Your app {@link android.content.Context}</li>
  <li>The layout that contains a {@link android.widget.TextView} for each string in the array</li>
  <li>The string array</li>
</ul>
<p>Then simply call
{@link android.widget.ListView#setAdapter setAdapter()} on your {@link android.widget.ListView}:</p>
<pre>
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
</pre>

      <p>To customize the appearance of each item you can override the {@link
java.lang.Object#toString()} method for the objects in your array. Or, to create a view for each
item that's something other than a {@link android.widget.TextView} (for example, if you want an
{@link android.widget.ImageView} for each array item), extend the {@link
android.widget.ArrayAdapter} class and override {@link android.widget.ArrayAdapter#getView
getView()} to return the type of view you want for each item.</p>

</dd>

  <dt>{@link android.widget.SimpleCursorAdapter}</dt>
    <dd>Use this adapter when your data comes from a {@link android.database.Cursor}. When
using {@link android.widget.SimpleCursorAdapter}, you must specify a layout to use for each
row in the {@link android.database.Cursor} and which columns in the {@link android.database.Cursor}
should be inserted into which views of the layout. For example, if you want to create a list of
people's names and phone numbers, you can perform a query that returns a {@link
android.database.Cursor} containing a row for each person and columns for the names and
numbers. You then create a string array specifying which columns from the {@link
android.database.Cursor} you want in the layout for each result and an integer array specifying the
corresponding views that each column should be placed:</p>
<pre>
String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, 
                        ContactsContract.CommonDataKinds.Phone.NUMBER};
int[] toViews = {R.id.display_name, R.id.phone_number};
</pre>
<p>When you instantiate the {@link android.widget.SimpleCursorAdapter}, pass the layout to use for
each result, the {@link android.database.Cursor} containing the results, and these two arrays:</p>
<pre>
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
        R.layout.person_name_and_number, cursor, fromColumns, toViews, 0);
ListView listView = getListView();
listView.setAdapter(adapter);
</pre>
<p>The {@link android.widget.SimpleCursorAdapter} then creates a view for each row in the
{@link android.database.Cursor} using the provided layout by inserting each {@code
fromColumns} item into the corresponding {@code toViews} view.</p>.</dd>
</dl>


<p>If, during the course of your application's life, you change the underlying data that is read by
your adapter, you should call {@link android.widget.ArrayAdapter#notifyDataSetChanged()}. This will
notify the attached view that the data has been changed and it should refresh itself.</p>



<h3 id="HandlingUserSelections">Handling click events</h3>

<p>You can respond to click events on each item in an {@link android.widget.AdapterView} by
implementing the {@link android.widget.AdapterView.OnItemClickListener} interface. For example:</p>

<pre>
// Create a message handling object as an anonymous class.
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        // Do something in response to the click
    }
};

listView.setOnItemClickListener(mMessageClickedHandler); 
</pre>



