Home | History | Annotate | Download | only in ui
      1 page.title=Layouts
      2 page.tags=vista,grupodevistas
      3 @jd:body
      4 
      5 <div id="qv-wrapper">
      6 <div id="qv">
      7   <h2>Neste documento</h2>
      8 <ol>
      9   <li><a href="#write">Programao do XML</a></li>
     10   <li><a href="#load">Carregamento do recurso XML</a></li>
     11   <li><a href="#attributes">Atributos</a>
     12     <ol>
     13       <li><a href="#id">ID</a></li>
     14       <li><a href="#layout-params">Parmetros do layout</a></li>
     15     </ol>
     16   </li>
     17   <li><a href="#Position">Posio do layout</a></li>
     18   <li><a href="#SizePaddingMargins">Tamanho, preenchimento e margens</a></li>
     19   <li><a href="#CommonLayouts">Layouts comuns</a></li>
     20   <li><a href="#AdapterViews">Criao de layouts com um adaptador</a>
     21     <ol>
     22       <li><a href="#FillingTheLayout">Preenchimento da vista de um adaptador com dados</a></li>
     23       <li><a href="#HandlingUserSelections">Tratamento de eventos de clique</a></li>
     24     </ol>
     25   </li>
     26 </ol>
     27 
     28   <h2>Classes principais</h2>
     29   <ol>
     30     <li>{@link android.view.View}</li>
     31     <li>{@link android.view.ViewGroup}</li>
     32     <li>{@link android.view.ViewGroup.LayoutParams}</li>
     33   </ol>
     34 
     35   <h2>Veja tambm</h2>
     36   <ol>
     37     <li><a href="{@docRoot}training/basics/firstapp/building-ui.html">Construo de uma interface do usurio
     38 simples</a></li> </div>
     39 </div>
     40 
     41 <p>O layout define a estrutura visual para uma interface do usurio, como a IU de uma <a href="{@docRoot}guide/components/activities.html">atividade</a> ou de um <a href="{@docRoot}guide/topics/appwidgets/index.html">widget de aplicativo</a>.
     42  possvel declarar um layout de dois modos:</p>
     43 <ul>
     44 <li><strong>Declarar elementos da IU em XML</strong>. O Android fornece um vocabulrio XML
     45 direto que corresponde s classes e subclasses de View, como as de widgets e layouts.</li>
     46 <li><strong>Instanciar elementos do layout em tempo de execuo</strong>.
     47 O aplicativo pode criar objetos de View e ViewGroup (e manipular suas propriedades) programaticamente. </li>
     48 </ul>
     49 
     50 <p>A estrutura do Android  flexvel para usar um destes mtodos ou ambos para declarar e gerenciar a IU do seu aplicativo. Por exemplo: voc pode declarar um layout padro do aplicativo em XML, e incluir os elementos da tela que aparecero neles e suas propriedades. Em seguida, voc poderia adicionar cdigos ao aplicativo que modificariam o estado dos objetos da tela, inclusive os declarados em XML, em tempo de execuo. </p>
     51 
     52 <div class="sidebox-wrapper">
     53 <div class="sidebox">
     54   <ul>
     55   <li>A <a href="{@docRoot}tools/sdk/eclipse-adt.html">Extenso
     56 ADT para Eclipse</a> oferece uma pr-visualizao do layout do XML &mdash;
     57 com o arquivo XML aberto, selecione a guia <strong>Layout</strong>.</li>
     58   <li>Pode-se usar tambm a
     59   ferramenta de <a href="{@docRoot}tools/debugging/debugging-ui.html#hierarchyViewer">Visualizao de hierarquia</a>
     60 para depurar layouts &mdash; ela revela os valores de propriedades do layout,
     61 desenha o esqueleto do layout com indicadores de preenchimento/margens e vistas totalmente renderizadas
     62 e a depurao pode ocorrer no emulador ou no dispositivo.</li>
     63   <li>A ferramenta <a href="{@docRoot}tools/debugging/debugging-ui.html#layoutopt">layoutopt</a> permite
     64   a rpida anlise dos layouts e hierarquias com relao a ineficincias e outros problemas.</li>
     65 </div>
     66 </div>
     67 
     68 <p>A vantagem de declarar a IU em XML  separar melhor a apresentao do aplicativo a partir do cdigo que controla seu comportamento. As descries da IU so externas ao cdigo do aplicativo, ou seja,  possvel modific-la ou adapt-la sem modificar o cdigo-fonte e recompilar. Por exemplo:  possvel criar layouts XML para diferentes orientaes de tela, diferentes tamanhos de tela de dispositivos e diferentes idiomas. Alm disso, a declarao de layout em XML facilita a exibio da estrutura da sua IU, o que facilita a depurao de problemas. Assim sendo, este documento se concentrar em ensinar a declarar o layout em XML. Se voc
     69 estiver interessado em instanciar objetos View em tempo de execuo, consulte as referncias das classes
     70 {@link android.view.ViewGroup} e {@link android.view.View}.</p>
     71 
     72 <p>Em geral, o vocabulrio XML para declarar elementos da IU segue rigorosamente a estrutura e a atribuio de nome s classes e aos mtodos, em que os nomes de elementos correspondem a nomes de classe e nomes de atributos correspondem a mtodos. Na verdade, a correspondncia normalmente  to direta que  possvel supor qual atributo XML corresponde a determinado mtodo de classe ou supor qual classe corresponde a certo elemento XML. Contudo, observe que nem todo vocabulrio  idntico. Em alguns casos, h pequenas diferenas de nome. Por exemplo:
     73 o elemento EditText tem um atributo <code>text</code> que corresponde
     74 a <code>EditText.setText()</code>. </p>
     75 
     76 <p class="note"><strong>Dica:</strong> Veja os diferentes tipos de layout em <a href="{@docRoot}guide/topics/ui/layout-objects.html">Objetos
     77 de layout comuns</a>. Tambm h uma coleo de tutoriais sobre a criao de diversos layouts
     78 no guia de tutorial <a href="{@docRoot}resources/tutorials/views/index.html">Vistas de boas-vindas</a>.</p>
     79 
     80 <h2 id="write">Programao do XML</h2>
     81 
     82 <p>Usando o vocabulrio XML do Android,  possvel projetar rapidamente layouts de IU e os elementos de tela intrnsecos do mesmo modo que se cria pginas web em HTML &mdash; com uma srie de elementos aninhados. </p>
     83 
     84 <p>Cada arquivo de layout deve conter exatamente um elemento raiz, que deve ser um objeto View ou ViewGroup. Com o elemento raiz definido,  possvel adicionar objetos ou widgets de layout extras como elementos filho para construir gradualmente uma hierarquia de View que define o layout. Por exemplo: eis um layout XML que usa um {@link android.widget.LinearLayout} vertical
     85 para conter uma {@link android.widget.TextView} e um {@link android.widget.Button}:</p>
     86 <pre>
     87 &lt;?xml version="1.0" encoding="utf-8"?>
     88 &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     89               android:layout_width="match_parent"
     90               android:layout_height="match_parent"
     91               android:orientation="vertical" >
     92     &lt;TextView android:id="@+id/text"
     93               android:layout_width="wrap_content"
     94               android:layout_height="wrap_content"
     95               android:text="Hello, I am a TextView" />
     96     &lt;Button android:id="@+id/button"
     97             android:layout_width="wrap_content"
     98             android:layout_height="wrap_content"
     99             android:text="Hello, I am a Button" />
    100 &lt;/LinearLayout>
    101 </pre>
    102 
    103 <p>Aps declarar o layout no XML, salve o arquivo com uma extenso <code>.xml</code>
    104 no diretrio <code>res/layout/</code> do projeto do Android para compil-lo adequadamente. </p>
    105 
    106 <p>Veja mais informaes sobre a sintaxe de um arquivo XML de layout no documento <a href="{@docRoot}guide/topics/resources/layout-resource.html">Recursos de layout</a>.</p>
    107 
    108 <h2 id="load">Carregamento do recurso XML</h2>
    109 
    110 <p>Ao compilar o aplicativo, cada arquivo de layout XML  compilado
    111 em um recurso {@link android.view.View}. Deve-se carregar o recurso de layout do cdigo do aplicativo
    112 na implementao de retorno de chamada {@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()}.
    113 Para isso, chame <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>,
    114 passando a referncia para o recurso de layout na forma:
    115 <code>R.layout.<em>layout_file_name</em></code>.
    116 Por exemplo: se o layout XML for salvo como <code>main_layout.xml</code>, ser necessrio carreg-lo
    117 para a Atividade desta forma:</p>
    118 <pre>
    119 public void onCreate(Bundle savedInstanceState) {
    120     super.onCreate(savedInstanceState);
    121     setContentView(R.layout.main_layout);
    122 }
    123 </pre>
    124 
    125 <p>O mtodo de retorno de chamada <code>onCreate()</code> na Atividade  chamado pela estrutura do Android quando
    126 ela  inicializada (veja a discusso sobre ciclos de vida no documento
    127 <a href="{@docRoot}guide/components/activities.html#Lifecycle">Atividades</a>
    128 ).</p>
    129 
    130 
    131 <h2 id="attributes">Atributos</h2>
    132 
    133 <p>Cada objeto View e ViewGroup aceita uma variedade prpria de atributos XML.
    134 Alguns atributos so especficos de um objeto View (por exemplo, TextView aceita o atributo
    135 <code>textSize</code>), mas esses atributos tambm so herdados de objetos View que possam estender essa classe.
    136 Alguns so comuns a todos os objetos View porque so herdados da classe View raiz (como
    137 o atributo <code>id</code>). Alm disso, outros atributos so considerados "parmetros do layout", que so
    138 os que descrevem determinadas orientaes de layout do objeto View conforme definido pelo objeto
    139 ViewGroup pai daquele objeto.</p>
    140 
    141 <h3 id="id">ID</h3>
    142 
    143 <p>Qualquer objeto View pode ter um ID de nmero inteiro associado para identificar exclusivamente o View dentro da rvore.
    144 Ao compilar o aplicativo, esse ID  referenciado como um nmero inteiro, mas o ID normalmente
    145  atribudo no arquivo XML do layout como uma string, no atributo <code>id</code>.
    146  um atributo XML comum a todos os objetos View
    147 (definido pela classe {@link android.view.View}) e voc o usar com frequncia.
    148 A sintaxe de um ID, dentro de uma tag XML, :</p>
    149 <pre>android:id="&#64;+id/my_button"</pre>
    150 
    151 <p>Um smbolo de arroba (@) no incio da string indica que o analisador XML deve analisar e expandir o restante
    152 da string de ID e identific-la como um recurso de ID. O smbolo de mais (+) significa que  um novo nome de recurso que precisa
    153 ser criado e adicionado aos recursos (no arquivo <code>R.java</code>). H diversos outros recursos de ID
    154 oferecidos pela estrutura do Android. Ao referenciar um ID de recurso do Android, no  necessrio ter o smbolo de mais,
    155 mas deve-se adicionar o conjunto de nomes (namespace) do pacote <code>android</code> da seguinte maneira:</p>
    156 <pre>android:id="&#64;android:id/empty"</pre>
    157 <p>Com o conjunto de nomes (namespace) do pacote <code>android</code> em vigor, podemos referenciar um ID da classe
    158 de recursos <code>android.R</code> em vez de um da classe de recursos locais.</p>
    159 
    160 <p>Para criar vistas e referenci-las a partir do aplicativo, um modo padro comum :</p>
    161 <ol>
    162   <li>Definir uma visualizaovistawidget no arquivo de layout e atribuir um ID exclusivo a ele/ela:
    163 <pre>
    164 &lt;Button android:id="&#64;+id/my_button"
    165         android:layout_width="wrap_content"
    166         android:layout_height="wrap_content"
    167         android:text="&#64;string/my_button_text"/>
    168 </pre>
    169   </li>
    170   <li>Em seguida, crie uma instncia do objeto de vista e capture-a do layout
    171 (normalmente no mtodo <code>{@link android.app.Activity#onCreate(Bundle) onCreate()}</code>):
    172 <pre>
    173 Button myButton = (Button) findViewById(R.id.my_button);
    174 </pre>
    175   </li>
    176 </ol>
    177 <p>Definir IDs para objetos de vista  importante ao criar um {@link android.widget.RelativeLayout}.
    178 Em um layout relativo, vistas irms podem definir o layout relativo para outra vista irm
    179 referenciada pelo ID exclusivo.</p>
    180 <p>Os Ids no precisam ser exclusivo por toda a rvore, mas devem ser
    181 exclusivos dentro da parte da rvore em que se est procurando (que pode, com frequncia, ser toda a rvore, portanto  prefervel
    182 ser totalmente exclusivo sempre que possvel).</p>
    183 
    184 
    185 <h3 id="layout-params">Parmetros do layout</h3>
    186 
    187 <p>Os atributos do layout XML chamados <code>layout_<em>something</em></code> definem
    188 parmetros para a View que for apropriado para a ViewGroup em que reside.</p>
    189 
    190 <p>Cada classe ViewGroup implementa uma classe aninhada que estende {@link
    191 android.view.ViewGroup.LayoutParams}. Essa subclasse
    192 contm tipos de propriedade que definem o tamanho e a posio de cada vista filha, conforme
    193 o necessrio para o grupo de vistas. Como se pode ver na figura 1, um grupo de vistas
    194 pais define parmetros de layout para cada vista filha (incluindo o grupo de vistas filhas).</p>
    195 
    196 <img src="{@docRoot}images/layoutparams.png" alt="" />
    197 <p class="img-caption"><strong>Figura 1.</strong> Vista de uma hierarquia de vistas com parmetros
    198 de layout associados a cada uma delas.</p>
    199 
    200 <p>Observe que cada subclasse LayoutParams tem a prpria sintaxe para definir
    201 valores. Cada elemento filho deve definir LayoutParams apropriados para seu pai,
    202 embora possa tambm definir diferentes LayoutParams para os prprios filhos. </p>
    203 
    204 <p>Todos os grupos de vistas contm largura e altura (<code>layout_width</code> e
    205 <code>layout_height</code>) e cada vista  obrigatria para defini-las. Muitos
    206 LayoutParams tambm contm margens e bordas opcionais. <p>
    207 
    208 <p> possvel especificar largura e altura com medidas exatas, embora no seja
    209 recomendvel na maioria dos casos. Em geral, usa-se uma destas constantes para
    210 definir a largura e a altura: </p>
    211 
    212 <ul>
    213   <li><var>wrap_content</var> instrui a vista a dimensionar-se de acordo com
    214 as medidas exigidas pelo contedo.</li>
    215   <li><var>match_parent</var> (de nome <var>fill_parent</var> antes da API de nvel 8)
    216 instrui a vista a tornar-se to grande quanto o grupo de vistas pais permitir.</li>
    217 </ul>
    218 
    219 <p>Em geral, a especificao de largura e altura de um layout com unidades absolutas, como
    220 pixels, no  recomendada. Em vez disso, usam-se medidas relativas como
    221 unidades de pixel independentes de densidade (<var>dp</var>), <var>wrap_content</var>ou
    222 <var>match_parent</var>,  uma abordagem melhor porque ajuda a garantir
    223 que o aplicativo exiba o contedo adequadamente dentre diversos tamanhos de tela de dispositivos.
    224 Os tipos de medidas aceitos so definidos no documento
    225 <a href="{@docRoot}guide/topics/resources/available-resources.html#dimension">
    226 Recursos disponveis</a>.</p>
    227 
    228 
    229 <h2 id="Position">Posio do layout</h2>
    230    <p>
    231    A geometria de uma vista de um retngulo. As vistas tm uma localizao,
    232    expressa como um par de coordenadas <em>esquerda</em> e <em>topo</em>
    233    e duas dimenses, expressas como largura e altura. A unidade de localizao
    234    e de dimenses  o pixel.
    235    </p>
    236 
    237    <p>
    238     possvel recuperar a localizao de uma vista chamando os mtodos
    239    {@link android.view.View#getLeft()} e {@link android.view.View#getTop()}. O primeiro retorna a coordenada
    240    esquerda, ou X, do retngulo que representa a vista. O ltimo retorna a coordenada
    241    topo, ou Y, do retngulo que representa a vista. Esses mtodos
    242    retornam a localizao da vista em relao ao pai correspondente. Por exemplo:
    243    quando <code>getLeft()</code> retorna 20, significa que a vista se localiza 20 pixels 
    244    direita da borda esquerda do seu pai direto.
    245    </p>
    246 
    247    <p>
    248    Adicionalmente, diversos mtodos de convenincia so oferecidos para evitar clculos
    249 desnecessrias, chamados {@link android.view.View#getRight()} e {@link android.view.View#getBottom()}.
    250    Esses mtodos retornam as coordenadas das bordas direita e de baixo
    251    do retngulo que representa a vista. Por exemplo: chamar {@link android.view.View#getRight()}
    252     semelhante ao seguinte clculo: <code>getLeft() + getWidth()</code>.
    253    </p>
    254 
    255 
    256 <h2 id="SizePaddingMargins">Tamanho, preenchimento e margens</h2>
    257    <p>
    258    O tamanho de uma vista  expresso por largura e altura. As vistas, na verdade,
    259    tm dois pares de valores de largura e altura.
    260    </p>
    261 
    262    <p>
    263    O primeiro par  conhecido como <em>largura medida</em>
    264    e <em>altura medida</em>. Essas dimenses definem o tamanho que a vista ter
    265    dentro da vista pai.
    266    Para obter as dimenses medidas, chamam-se {@link android.view.View#getMeasuredWidth()}
    267    e {@link android.view.View#getMeasuredHeight()}.
    268    </p>
    269 
    270    <p>
    271    O segundo par  simplesmente conhecido como <em>largura</em> e <em>altura</em> ou,
    272    s vezes, <em>largura do desenho</em> e <em>altura do desenho</em>. Essas
    273    dimenses definem o tamanho real da vista na tela, em tempo de desenho e
    274    aps o layout. Esses valores podem diferir da largura
    275    e da altura medidas. Para obter os valores de largura e altura, chamam-se
    276    {@link android.view.View#getWidth()} e {@link android.view.View#getHeight()}.
    277    </p>
    278 
    279    <p>
    280    Para medir as dimenses, a vista leva em conta o preenchimento. O preenchimento
    281     expresso em pixels para a esquerda, a direita e as partes de cima e de baixo da vista.
    282    O preenchimento pode ser usado para compensar o contedo da vista por um nmero especfico
    283    de pixels. Por exemplo: um preenchimento  esquerda de 2 empurrar o contedo da vista
    284    em 2 pixels para a direita da borda esquerda. Para definir o preenchimento, usa-se
    285    o mtodo {@link android.view.View#setPadding(int, int, int, int)} e consulta-se com as chamadas
    286    {@link android.view.View#getPaddingLeft()}, {@link android.view.View#getPaddingTop()},
    287    {@link android.view.View#getPaddingRight()} e {@link android.view.View#getPaddingBottom()}.
    288    </p>
    289 
    290    <p>
    291    Mesmo que cada vista possa definir um preenchimento, ela no fornece nenhuma compatibilidade
    292    com margens. No entanto, os grupos de vistas oferecem essa compatibilidade. Consulte
    293    {@link android.view.ViewGroup}
    294    e {@link android.view.ViewGroup.MarginLayoutParams} para ver mais informaes.
    295    </p>
    296 
    297    <p>Para obter mais informaes sobre dimenses, consulte
    298    <a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">Valores de dimenses</a>.
    299    </p>
    300 
    301 
    302 
    303 
    304 
    305 
    306 <style type="text/css">
    307 div.layout {
    308   float:left;
    309   width:200px;
    310   margin:0 0 20px 20px;
    311 }
    312 div.layout.first {
    313   margin-left:0;
    314   clear:left;
    315 }
    316 </style>
    317 
    318 
    319 
    320 
    321 <h2 id="CommonLayouts">Layouts comuns</h2>
    322 
    323 <p>Cada subclasse da classe {@link android.view.ViewGroup} fornece um modo exclusivo de exibir
    324 as vistas aninhadas dentro dela. Eis alguns dos tipos de layout mais comuns criados
    325 na plataforma Android.</p>
    326 
    327 <p class="note"><strong>Observao:</strong> Embora seja possvel aninhar um ou mais layouts em outro
    328 layout para obter o projeto de IU, deve-se procurar manter a hierarquia do layout a menos profunda
    329 possvel. O layout carrega mais rpido se tiver menos layouts aninhados (uma hierarquia de vistas grande 
    330 melhor do que uma hierarquia de vistas profunda).</p>
    331 
    332 <!--
    333 <h2 id="framelayout">FrameLayout</h2>
    334 <p>{@link android.widget.FrameLayout FrameLayout} is the simplest type of layout
    335 object. It's basically a blank space on your screen that you can
    336 later fill with a single object &mdash; for example, a picture that you'll swap in and out.
    337 All child elements of the FrameLayout are pinned to the top left corner of the screen; you cannot
    338 specify a different location for a child view. Subsequent child views will simply be drawn over
    339 previous ones,
    340 partially or totally obscuring them (unless the newer object is transparent).
    341 </p>
    342 -->
    343 
    344 
    345 <div class="layout first">
    346   <h4><a href="layout/linear.html">Layout linear</a></h4>
    347   <a href="layout/linear.html"><img src="{@docRoot}images/ui/linearlayout-small.png" alt="" /></a>
    348   <p>Layout que organiza os filhos em uma nica linha horizontal ou vertical. Ele
    349   cria uma barra de rolagem se o comprimento da janela exceder o comprimento da tela.</p>
    350 </div>
    351 
    352 <div class="layout">
    353   <h4><a href="layout/relative.html">Layout relativo</a></h4>
    354   <a href="layout/relative.html"><img src="{@docRoot}images/ui/relativelayout-small.png" alt="" /></a>
    355   <p>Permite especificar a localizao de objetos filhos relativos entre si (filho A
    356  esquerda do filho B) ou relativos aos pais (alinhados no topo do pai).</p>
    357 </div>
    358 
    359 <div class="layout">
    360   <h4><a href="{@docRoot}guide/webapps/webview.html">Vista web</a></h4>
    361   <a href="{@docRoot}guide/webapps/webview.html"><img src="{@docRoot}images/ui/webview-small.png" alt="" /></a>
    362   <p>Exibe pginas da web.</p>
    363 </div>
    364 
    365 
    366 
    367 
    368 <h2 id="AdapterViews" style="clear:left">Criao de layouts com um adaptador</h2>
    369 
    370 <p>Quando o contedo do layout  dinmico ou no predeterminado,  possvel usar um layout que
    371 torne {@link android.widget.AdapterView} uma subclasse para preencher o layout com vistas em tempo de execuo.
    372 Uma subclasse da classe {@link android.widget.AdapterView} usa um {@link android.widget.Adapter}
    373 para agrupar dados ao seu layout. O {@link android.widget.Adapter} se comporta como um intermedirio entre a fonte
    374 dos dados e o layout do {@link android.widget.AdapterView} &mdash; o {@link android.widget.Adapter}
    375 recupera os dados (de uma fonte como uma matriz ou uma consulta de banco de dados) e converte cada entrada
    376 em uma vista que pode ser adicionada ao layout do {@link android.widget.AdapterView}.</p>
    377 
    378 <p>Alguns layouts comuns retornados por um adaptador:</p>
    379 
    380 <div class="layout first">
    381   <h4><a href="layout/listview.html">Vista em lista</a></h4>
    382   <a href="layout/listview.html"><img src="{@docRoot}images/ui/listview-small.png" alt="" /></a>
    383   <p>Exibe uma lista de rolagem de coluna nica.</p>
    384 </div>
    385 
    386 <div class="layout">
    387   <h4><a href="layout/gridview.html">Vista em grade</a></h4>
    388   <a href="layout/gridview.html"><img src="{@docRoot}images/ui/gridview-small.png" alt="" /></a>
    389   <p>Exibe uma grade de rolagem de colunas e linhas.</p>
    390 </div>
    391 
    392 
    393 
    394 <h3 id="FillingTheLayout" style="clear:left">Preenchimento da vista de adaptador com dados</h3>
    395 
    396 <p> possvel preencher um {@link android.widget.AdapterView} como {@link android.widget.ListView}
    397 ou {@link android.widget.GridView} agrupando-se a instncia do {@link android.widget.AdapterView}
    398 a um {@link android.widget.Adapter}, o que recupera dados de uma fonte externa e cria uma {@link
    399 android.view.View} que representa cada entrada de dados.</p>
    400 
    401 <p>O Android oferece diversas subclasses de {@link android.widget.Adapter} que so teis para
    402 recuperar diferentes tipos de dados e criar vistas de um {@link android.widget.AdapterView}.
    403 Os dois adaptadores mais comuns so:</p>
    404 
    405 <dl>
    406   <dt>{@link android.widget.ArrayAdapter}</dt>
    407     <dd>Use esse adaptador quando a fonte de dados for uma matriz. Por padro, {@link
    408 android.widget.ArrayAdapter} cria uma vista para cada item de matriz chamando {@link
    409 java.lang.Object#toString()} em cada item e posicionando o contedo em uma {@link
    410 android.widget.TextView}.
    411       <p>Por exemplo: se voc tiver uma matriz de strings que deseja exibir em uma {@link
    412 android.widget.ListView}, inicialize um novo {@link android.widget.ArrayAdapter} com
    413 um construtor para especificar o layout de cada string e a matriz de strings:</p>
    414 <pre>
    415 ArrayAdapter&lt;String> adapter = new ArrayAdapter&lt;String>(this,
    416         android.R.layout.simple_list_item_1, myStringArray);
    417 </pre>
    418 <p>Os argumentos desse construtor so:</p>
    419 <ul>
    420   <li>O {@link android.content.Context} do aplicativo</li>
    421   <li>O layout que contm uma {@link android.widget.TextView} para cada string na matriz</li>
    422   <li>A matriz de strings</li>
    423 </ul>
    424 <p>Em seguida, simplesmente chame
    425 {@link android.widget.ListView#setAdapter setAdapter()} na {@link android.widget.ListView}:</p>
    426 <pre>
    427 ListView listView = (ListView) findViewById(R.id.listview);
    428 listView.setAdapter(adapter);
    429 </pre>
    430 
    431       <p>Para personalizar a aparncia de cada item,  possvel suspender o mtodo {@link
    432 java.lang.Object#toString()} para os objetos na matriz. Ou, para criar uma vista para cada
    433 item diferente de uma {@link android.widget.TextView} (por exemplo, se voc quiser
    434 uma {@link android.widget.ImageView} para cada item da matriz), estenda a classe {@link
    435 android.widget.ArrayAdapter} e suspenda {@link android.widget.ArrayAdapter#getView
    436 getView()} para retornar o tipo de vista que deseja para cada item.</p>
    437 
    438 </dd>
    439 
    440   <dt>{@link android.widget.SimpleCursorAdapter}</dt>
    441     <dd>Use este adaptador quando os dados vierem de um {@link android.database.Cursor}.
    442 Ao usar {@link android.widget.SimpleCursorAdapter},  necessrio especificar um layout a usar para cada
    443 linha no {@link android.database.Cursor} e que colunas no {@link android.database.Cursor}
    444 devem ser inseridas em determinadas vistas do layout. Por exemplo: se voc deseja criar uma lista
    445 de nome e nmero de telefone de pessoas, pode-se realizar uma consulta que retorna um {@link
    446 android.database.Cursor} que contm uma linha para cada pessoa e colunas para os nomes
    447 e nmeros. Assim, cria-se uma matriz de strings especificando quais colunas do {@link
    448 android.database.Cursor} estaro no layout para cada resultado e uma matriz de nmeros inteiros especificando
    449 as vistas correspondentes em que cada coluna deve ser colocada:</p>
    450 <pre>
    451 String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
    452                         ContactsContract.CommonDataKinds.Phone.NUMBER};
    453 int[] toViews = {R.id.display_name, R.id.phone_number};
    454 </pre>
    455 <p>Ao instanciar o {@link android.widget.SimpleCursorAdapter}, passe o layout a usar
    456 para cada resultado, o {@link android.database.Cursor} contendo os resultados e estas duas matrizes:</p>
    457 <pre>
    458 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
    459         R.layout.person_name_and_number, cursor, fromColumns, toViews, 0);
    460 ListView listView = getListView();
    461 listView.setAdapter(adapter);
    462 </pre>
    463 <p>Em seguida, o {@link android.widget.SimpleCursorAdapter} cria uma vista de cada linha
    464 no{@link android.database.Cursor} usando o layout fornecido por meio da insero de cada item de {@code
    465 fromColumns} na vista {@code toViews} correspondente.</p>.</dd>
    466 </dl>
    467 
    468 
    469 <p>Se durante o curso de vida do aplicativo, voc mudar os dados subjacentes lidos
    470 pelo adaptador, chame {@link android.widget.ArrayAdapter#notifyDataSetChanged()}. Isso
    471 notificar  vista anexada que os dados foram alterados e que ela deve se atualizar.</p>
    472 
    473 
    474 
    475 <h3 id="HandlingUserSelections">Tratamento de eventos de clique</h3>
    476 
    477 <p>Para responder a eventos de clique em cada item em um {@link android.widget.AdapterView},
    478 implementa-se a interface {@link android.widget.AdapterView.OnItemClickListener}. Por exemplo:</p>
    479 
    480 <pre>
    481 // Create a message handling object as an anonymous class.
    482 private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
    483     public void onItemClick(AdapterView parent, View v, int position, long id) {
    484         // Do something in response to the click
    485     }
    486 };
    487 
    488 listView.setOnItemClickListener(mMessageClickedHandler);
    489 </pre>
    490 
    491 
    492 
    493