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 — 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 — 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 — 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 <?xml version="1.0" encoding="utf-8"?> 88 <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 <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 <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 </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="@+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="@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 <Button android:id="@+id/my_button" 165 android:layout_width="wrap_content" 166 android:layout_height="wrap_content" 167 android:text="@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 — 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} — 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<String> adapter = new ArrayAdapter<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