Home | History | Annotate | Download | only in ui
      1 page.title=Menus
      2 parent.title=Interface do usurio
      3 parent.link=index.html
      4 @jd:body
      5 
      6 <div id="qv-wrapper">
      7 <div id="qv">
      8   <h2>Neste documento</h2>
      9 <ol>
     10   <li><a href="#xml">Definio de um menu em XML</a></li>
     11   <li><a href="#options-menu">Criao de um menu de opes</a>
     12     <ol>
     13       <li><a href="#RespondingOptionsMenu">Tratamento de eventos de clique</a></li>
     14       <li><a href="#ChangingTheMenu">Alterao de itens de menu em tempo de execuo</a></li>
     15     </ol>
     16   </li>
     17   <li><a href="#context-menu">Criao de menus contextuais</a>
     18     <ol>
     19       <li><a href="#FloatingContextMenu">Criao de um menu de contexto flutuante</a></li>
     20       <li><a href="#CAB">Uso do modo de ao contextual</a></li>
     21     </ol>
     22   </li>
     23   <li><a href="#PopupMenu">Criao de um menu pop-up</a>
     24     <ol>
     25       <li><a href="#PopupEvents">Tratamento de eventos de clique</a></li>
     26     </ol>
     27   </li>
     28   <li><a href="#groups">Criao de grupos de menu</a>
     29     <ol>
     30       <li><a href="#checkable">Uso de itens de menu marcveis</a></li>
     31     </ol>
     32   </li>
     33   <li><a href="#intents">Adio de itens de menu com base em uma inteno</a>
     34     <ol>
     35       <li><a href="#AllowingToAdd">Permisso para a atividade ser adicionada a outros menus</a></li>
     36     </ol>
     37   </li>
     38 </ol>
     39 
     40   <h2>Classes principais</h2>
     41   <ol>
     42     <li>{@link android.view.Menu}</li>
     43     <li>{@link android.view.MenuItem}</li>
     44     <li>{@link android.view.ContextMenu}</li>
     45     <li>{@link android.view.ActionMode}</li>
     46   </ol>
     47 
     48   <h2>Veja tambm</h2>
     49   <ol>
     50     <li><a href="{@docRoot}guide/topics/ui/actionbar.html">Barra de ao</a></li>
     51     <li><a href="{@docRoot}guide/topics/resources/menu-resource.html">Recurso de menu</a></li>
     52     <li><a href="http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html">Diga
     53 adeus ao boto de menu</a></li>
     54   </ol>
     55 </div>
     56 </div>
     57 
     58 <p>Menus so componentes comuns da interface do usurio em diversos tipos de aplicativos. Para fornecer uma experincia
     59 familiar e consistente ao usurio, voc deve usar APIs de {@link android.view.Menu} para apresentar
     60 aes de usurio e outras opes em suas atividades.</p>
     61 
     62 <p>Comeando com Android 3.0 (API de nvel 11), dispositivos Android no so mais necessrios
     63 para fornecer um boto de <em>Menu</em> dedicado. Com esta alterao, os aplicativos do Android devem migrar de uma dependncia
     64 no painel de menu 6 itens tradicional para fornecer uma barra de ao para apresentar as aes comuns
     65 de usurio.</p>
     66 
     67 <p>Apesar de o design e a experincia do usurio para alguns dos itens do menu terem passado por mudanas, a semntica para definir
     68 um conjunto de aes e opes ainda baseia-se em APIs de {@link android.view.Menu} . Este guia
     69 mostra como criar os trs tipos fundamentais de menus ou apresentaes de ao
     70 em todas as verses do Android:</p>
     71 
     72 <dl>
     73   <dt><strong>Menu de opes e barra de ao</strong></dt>
     74     <dd>O <a href="#options-menu">menu de opes</a>  a coleo principal de itens de menu
     75 para uma atividade.  onde deve-se colocar as aes que tm impacto global no aplicativo,
     76 como "Buscar", "Escrever e-mail" e "Configuraes".
     77   <p>Se estiver desenvolvendo para Android 2.3 ou anterior, os usurios
     78 podem revelar o painel do menu de opes pressionando o boto <em>Menu</em>.</p>
     79   <p>No Android 3.0 ou em posteriores, os itens do menu de opesso apresentados pela <a href="{@docRoot}guide/topics/ui/actionbar.html">barra de ao</a> como uma combinao de itens
     80 de ao na tela e opes de estouro. A partir do Android 3.0, o boto <em>Menu</em>  censurado (alguns
     81 dispositivos
     82 no tm), ento voc deve migrar usando a barra de ao para fornecer acesso a aes
     83 e outras opes.</p>
     84   <p>Consulte a seo <a href="#options-menu">Criao de um menu de opes</a>.</p>
     85     </dd>
     86     
     87   <dt><strong>Modo de ao contextual e menu de contexto</strong></dt>
     88   
     89    <dd>Um menu de contexto  um <a href="#FloatingContextMenu">menu flutuante</a> que aparece quando
     90 o usurio realiza um clique longo em um elemento. Ele fornece aes que afetam o contedo selecionado
     91 ou a estrutura do contexto.
     92   <p>Ao desenvolver para Android 3.0 ou posterior, voc deve usar o <a href="#CAB">modo de ao contextual</a> para ativar as aes no contedo selecionado. Este modo exibe os itens de ao
     93 que afetam o contedo selecionado em uma barra no topo da tela e permite que o usurio
     94 selecione vrios itens.</p>
     95   <p>Consulte a seo <a href="#context-menu">Criao de menus contextuais</a>.</p>
     96 </dd>
     97     
     98   <dt><strong>Menu pop-up</strong></dt>
     99     <dd>Um menu pop-up exibe itens em uma lista vertical ancorada  vista
    100 que apresentou o menu.  bom para fornecer um estouro de aes relacionado a contedo especfico
    101 ou opes de fornecimento de uma segunda parte de um comando. As aes em um menu pop-up
    102 <strong>no</strong> devem afetar diretamente o contedo correspondente &mdash;  para isso que servem
    103 as aes contextuais. Preferivelmente, o menu pop-up serve para aes estendidas que relacionam as regies de contedo
    104 na atividade.
    105   <p>Consulte a seo <a href="#PopupMenu">criar um menu pop-up</a>.</p>
    106 </dd>
    107 </dl>
    108 
    109 
    110 
    111 <h2 id="xml">Definio de um menu em XML</h2>
    112 
    113 <p>Para todos os tipos de menu, o Android fornece um formato XML padro para definir os itens de menu.
    114 Em vez de criar um menu no cdigo da atividade, voc deve definir um menu e todos os seus itens
    115 em um <a href="{@docRoot}guide/topics/resources/menu-resource.html">recurso de menu</a> XML.  possvel, assim,
    116 inflar o recurso do menu (carreg-lo como um objeto {@link android.view.Menu}) na atividade, ou
    117 no fragmento.</p>
    118 
    119 <p>Usar um recurso de menu  uma boa prtica por alguns motivos:</p>
    120 <ul>
    121   <li> mais fcil para visualizar a estrutura do menu em XML.</li>
    122   <li>Ele separa o contedo do menu do cdigo comportamental do aplicativo.</li>
    123   <li>Ele permite criar configuraes alternativas de menu para verses diferentes de plataforma,
    124 de tamanhos de tela e de outras configuraes aproveitando a estrutura dos <a href="{@docRoot}guide/topics/resources/index.html">recursos do aplicativo</a>.</li>
    125 </ul>
    126 
    127 <p>Para definir o menu, crie um arquivo XML dentro do diretrio <code>res/menu/</code>
    128 do projeto e crie o menu com os seguintes elementos:</p>
    129 <dl>
    130   <dt><code>&lt;menu></code></dt>
    131     <dd>Define um {@link android.view.Menu}, que  um recipiente para os itens de menu. Um elemento
    132 <code>&lt;menu></code> deve ser o ndulo raiz para o arquivo e pode reter um ou mais elementos
    133 <code>&lt;item></code> e <code>&lt;group></code>.</dd>
    134 
    135   <dt><code>&lt;item></code></dt>
    136     <dd>Cria um {@link android.view.MenuItem}, que representa um nico item em um menu. Este
    137 elemento pode conter um elemento <code>&lt;menu></code> aninhado para criar um submenu.</dd>
    138     
    139   <dt><code>&lt;group></code></dt>
    140     <dd>Um recipiente invisvel e opcional para os elementos {@code &lt;item&gt;}. Ele permite que voc categorize
    141 itens de menu para que eles compartilhem propriedades como estado ativo e visibilidade. Para obter mais informaes,
    142 consulte a seo <a href="#groups">Criao de grupos de menu</a>.</dd>
    143 </dl>
    144 
    145 
    146 <p>A seguir h um exemplo de menu chamado <code>game_menu.xml</code>:</p>
    147 <pre>
    148 &lt;?xml version="1.0" encoding="utf-8"?&gt;
    149 &lt;menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    150     &lt;item android:id="@+id/new_game"
    151           android:icon="@drawable/ic_new_game"
    152           android:title="@string/new_game"
    153           android:showAsAction="ifRoom"/&gt;
    154     &lt;item android:id="@+id/help"
    155           android:icon="@drawable/ic_help"
    156           android:title="@string/help" /&gt;
    157 &lt;/menu&gt;
    158 </pre>
    159 
    160 <p>O elemento <code>&lt;item></code>  compatvel com vrios atributos que voc pode usar para definir a aparncia ou o comportamento
    161 de um item. Os itens no menu acima incluem os seguintes atributos:</p>
    162 
    163 <dl>
    164   <dt>{@code android:id}</dt>
    165     <dd>Um ID de recurso que  nico para o item. Ele permite que o aplicativo reconhea o item
    166 quando o usurio o seleciona.</dd>
    167   <dt>{@code android:icon}</dt>
    168     <dd>Uma referncia a um desenhvel para usar como o cone do item.</dd>
    169   <dt>{@code android:title}</dt>
    170     <dd>Uma referncia a uma string para usar como o ttulo do item.</dd>
    171   <dt>{@code android:showAsAction}</dt>
    172     <dd>Especifica quando e como este item deve aparecer como um item de ao na <a href="{@docRoot}guide/topics/ui/actionbar.html">barra de ao</a>.</dd>
    173 </dl>
    174 
    175 <p>Esses so os atributos mais importantes que devem ser usados, mas h vrios outros disponveis.
    176 Para obter informaes sobre todos os atributos compatveis, consulte o documento <a href="{@docRoot}guide/topics/resources/menu-resource.html">Recurso de menu</a>.</p>
    177 
    178 <p> possvel adicionar um submenu a um item em qualquer menu (exceto a um submenu) adicionando um elemento {@code &lt;menu&gt;}
    179 como filho de um {@code &lt;item&gt;}. Os submenus so teis quando o aplicativo
    180 tem vrias funes que podem ser organizadas em tpicos, como itens em uma barra de menu do aplicativo do PC (arquivo,
    181 editar, visualizar etc.). Por exemplo:</p>
    182 
    183 <pre>
    184 &lt;?xml version="1.0" encoding="utf-8"?&gt;
    185 &lt;menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    186     &lt;item android:id="@+id/file"
    187           android:title="@string/file" &gt;
    188         &lt;!-- "file" submenu --&gt;
    189         &lt;menu&gt;
    190             &lt;item android:id="@+id/create_new"
    191                   android:title="@string/create_new" /&gt;
    192             &lt;item android:id="@+id/open"
    193                   android:title="@string/open" /&gt;
    194         &lt;/menu&gt;
    195     &lt;/item&gt;
    196 &lt;/menu&gt;
    197 </pre>
    198 
    199 <p>Para usar o menu em sua atividade, voc precisa inflar o recurso do menu (converter o recurso
    200 XML em um objeto programvel) usando {@link android.view.MenuInflater#inflate(int,Menu)
    201 MenuInflater.inflate()}. Nas sees a seguir, voc ver como inflar um menu para cada
    202 tipo de menu.</p>
    203 
    204 
    205 
    206 <h2 id="options-menu">Criao de um menu de opes</h2>
    207 
    208 <div class="figure" style="width:200px;margin:0">
    209   <img src="{@docRoot}images/options_menu.png" height="333" alt="" />
    210   <p class="img-caption"><strong>Figura 1.</strong> Menu de opes
    211 no navegador, no Android 2.3.</p>
    212 </div>
    213 
    214 <p>O menu de opes  onde voc deve incluir aes e outras opes que so relevantes
    215 para o contexto de atividade atual, como "Buscar", "Escrever e-mail" e "Configuraes".</p>
    216 
    217 <p>O local onde os itens no menu de opes aparecem na tela depende da verso em que o aplicativo
    218 foi desenvolvido:</p>
    219 
    220 <ul>
    221   <li>Caso tenha desenvolvido o aplicativo para <strong>Android 2.3.x (API de nvel 10) ou 
    222 inferior</strong>, os contedos do menu de opes aparecero na parte inferior da tela, quando o usurio
    223 pressionar o boto <em>Menu</em>, como exibido na figura 1. Quando aberto, a primeira parte visvel 
    224 o menu
    225 de cones, que possui at seis itens de menu. Se o menu incluir mais de seis itens, o Android
    226 colocar o sexto item e o resto em um menu flutuante, que o usurio poder abrir selecionando
    227 <em>Mais</em>.</li>
    228 
    229   <li>Se voc desenvolveu o aplicativo para <strong>Android 3.0 (API de nvel 11) ou
    230 superior</strong>, os itens do menu de opes esto disponveis na <a href="{@docRoot}guide/topics/ui/actionbar.html">barra de ao</a>. Por padro, o sistema
    231 posiciona todos os itens na ao de estouro, que o usurio pode revelar com o cone de estouro de ao
    232 no lado direito da barra de ao (ou pressionando o boto <em>Menu</em>, se disponvel). Para
    233 ativar
    234 o acesso rpido a aes importantes,  possvel promover alguns itens para aparecerem na barra de ao adicionando
    235 {@code android:showAsAction="ifRoom"} aos elementos {@code &lt;item&gt;} correspondentes (veja a figura
    236 2). <p>Para obter mais informaes sobre os itens de ao e outros comportamentos da barra de ao, consulte o guia <a href="{@docRoot}guide/topics/ui/actionbar.html">Barra de ao</a>. </p>
    237 <p class="note"><strong>Observao:</strong> Mesmo se <em>no</em> estiver desenvolvendo para Android 3.0 ou
    238 posteriores,  possvel compilar seu prprio layout de barra de ao para obter um efeito semelhante. Para obter um exemplo de como  possvel
    239 suportar verses mais antigas do Android com uma barra de ao, consulte o exemplo <a href="{@docRoot}resources/samples/ActionBarCompat/index.html">Compatibilidade da barra de ao</a>
    240 .</p>
    241 </li>
    242 </ul>
    243 
    244 <img src="{@docRoot}images/ui/actionbar.png" alt="" />
    245 <p class="img-caption"><strong>Figura 2.</strong> Barra de ao do aplicativo <a href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a>, exibindo
    246 guias de navegao e um item de ao de cmera (alm do boto de estouro de ao).</p>
    247 
    248 <p> possvel declarar itens para o menu de opes da subclasse {@link android.app.Activity}
    249 ou de uma subclasse {@link android.app.Fragment}. Se a atividade e os fragmentos
    250 declararem itens para o menu de opes, eles estaro combinados na IU. O item da atividade aparece primeiro,
    251 seguido de cada um desses fragmentos na ordem em que so adicionados
    252  atividade. Se necessrio,  possvel reorganizar os itens do menu com o atributo {@code android:orderInCategory}
    253 em cada {@code &lt;item&gt;} que precisar mover.</p>
    254 
    255 <p>Para especificar o menu de opes para uma atividade, substitua {@link
    256 android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} (os fragmentos fornecem
    257 o prprio retorno de chamada de {@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()}). Neste mtodo
    258 ,  possvel inflar o recurso de menu (<a href="#xml">definido no XML</a>) em um {@link
    259 android.view.Menu} fornecido no retorno de chamada. Por exemplo:</p>
    260 
    261 <pre>
    262 &#64;Override
    263 public boolean onCreateOptionsMenu(Menu menu) {
    264     MenuInflater inflater = {@link android.app.Activity#getMenuInflater()};
    265     inflater.inflate(R.menu.game_menu, menu);
    266     return true;
    267 }
    268 </pre>
    269 
    270 <p>Tambm  possvel adicionar itens de menu usando {@link android.view.Menu#add(int,int,int,int)
    271 add()} e recuperar os itens com {@link android.view.Menu#findItem findItem()} para revisar
    272 as propriedades com APIs de {@link android.view.MenuItem}.</p>
    273 
    274 <p>Caso tenha desenvolvido o aplicativo para Android 2.3.x e anteriores, o sistema chamar {@link
    275 android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} para criar o menu de opes
    276 quando o usurio abrir o menu pela primeira vez. Caso tenha desenvolvido para Android 3.0 e posteriores,
    277 o sistema chama {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}
    278 ao iniciar a atividade para mostrar os itens para a barra de ao.</p>
    279 
    280 
    281 
    282 <h3 id="RespondingOptionsMenu">Tratamento de eventos de clique</h3>
    283 
    284 <p>Quando o usurio seleciona um item para o menu de opes (incluindo os itens de ao na barra de ao),
    285 o sistema chama o mtodo {@link android.app.Activity#onOptionsItemSelected(MenuItem)
    286 onOptionsItemSelected()} da atividade. Este mtodo passa o {@link android.view.MenuItem} selecionado.  possvel
    287 identificar o item chamando {@link android.view.MenuItem#getItemId()}, que retorna o ID nico
    288 para o item de menu (definido pelo atributo {@code android:id} no recurso de menu ou em um nmero inteiro
    289 dado ao mtodo {@link android.view.Menu#add(int,int,int,int) add()}).  possvel combinar este ID
    290 com itens de menu conhecidos para realizar a ao adequada. Por exemplo:</p>
    291 
    292 <pre>
    293 &#64;Override
    294 public boolean onOptionsItemSelected(MenuItem item) {
    295     // Handle item selection
    296     switch (item.getItemId()) {
    297         case R.id.new_game:
    298             newGame();
    299             return true;
    300         case R.id.help:
    301             showHelp();
    302             return true;
    303         default:
    304             return super.onOptionsItemSelected(item);
    305     }
    306 }
    307 </pre>
    308 
    309 <p>Ao lidar com um item de menu, retorne {@code true}. Se no lidar com o item de menu,
    310  voc dever chamar a implementao de superclasse de {@link
    311 android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} (a implementao
    312 padro retornar como falsa).</p>
    313 
    314 <p>Se a atividade incluir fragmentos, o sistema chamar primeiro {@link
    315 android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} para a atividade e, em seguida,
    316 para cada fragmento (na ordem em que cada fragmento foi adicionado) at um retornar como
    317 {@code true} ou at todos os fragmentos serem chamados.</p>
    318 
    319 <p class="note"><strong>Dica:</strong> o Android 3.0 adiciona a possibilidade de definir o comportamento do clique
    320 para um item de menu em XML, usando o atributo {@code android:onClick}. O valor do atributo
    321 deve ser o nome de um mtodo definido pela atividade usando o menu. O mtodo
    322 deve ser pblico e aceitar um nico parmetro {@link android.view.MenuItem} &mdash; quando o sistema chamar este mtodo,
    323  ele passar o item de menu selecionado. Para obter mais informaes e um exemplo, consulte o documento <a href="{@docRoot}guide/topics/resources/menu-resource.html">Recurso de menu</a>.</p>
    324 
    325 <p class="note"><strong>Dica:</strong> se o aplicativo contiver vrias atividades
    326 e algumas delas fornecerem o mesmo menu de opes,
    327 considere criar uma atividade que no implemente nada exceto os mtodos {@link android.app.Activity#onCreateOptionsMenu(Menu)
    328 onCreateOptionsMenu()} e {@link android.app.Activity#onOptionsItemSelected(MenuItem)
    329 onOptionsItemSelected()}. Em seguida, estenda esta classe para cada atividade que deve compartilhar
    330 o mesmo menu de opes. Desta maneira,  possvel gerenciar um conjunto de cdigos para lidar com aes de menu
    331 e cada classe descendente herda os comportamentos do menu.
    332 Se quiser adicionar itens de menu a uma das atividades descendentes,
    333 substitua {@link android.app.Activity#onCreateOptionsMenu(Menu)
    334 onCreateOptionsMenu()} nesta atividade. Chame {@code super.onCreateOptionsMenu(menu)} para que os itens de menu originais
    335 sejam criados e, em seguida, adicione os novos itens de menu com {@link
    336 android.view.Menu#add(int,int,int,int) menu.add()}. Voc tambm pode substituir o comportamento
    337 da superclasse para itens de menu individuais.</p>
    338 
    339 
    340 <h3 id="ChangingTheMenu">Alterao dos itens de menu em tempo de execuo</h3>
    341 
    342 <p>Depois que o sistema chamar {@link android.app.Activity#onCreateOptionsMenu(Menu)
    343 onCreateOptionsMenu()}, ele reter uma instncia do {@link android.view.Menu} que voc popular
    344 e no chamar {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}
    345 novamente, a no ser que o menu seja invalidado por algum motivo. No entanto, voc deve usar {@link
    346 android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} somente para criar o estado inicial do menu
    347 e no para realizar alteraes durante o ciclo de vida da atividade.</p>
    348 
    349 <p>Caso queira modificar o menu de opes com base
    350 em eventos que ocorrem durante o ciclo de vida da atividade,  possvel faz-lo
    351 no mtodo {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}. Este mtodo
    352 passa a voc o objeto {@link android.view.Menu}, j que ele existe para que seja possvel modific-lo,
    353 como com adio, remoo ou desativao de itens. (Os fragmentos tambm fornecem um retorno de chamada {@link
    354 android.app.Fragment#onPrepareOptionsMenu onPrepareOptionsMenu()}.)</p>
    355 
    356 <p>No Android 2.3.x e em anteriores, o sistema chamar {@link
    357 android.app.Activity#onPrepareOptionsMenu(Menu)
    358 onPrepareOptionsMenu()} sempre que o usurio abrir o menu de opes (pressionar o boto <em>Menu</em>
    359 ).</p>
    360 
    361 <p>No Android 3.0 e posteriores, avalia-se o menu de opes quanto a sempre estar aberto quando os itens de menu
    362 so apresentados na barra de ao. Quando um evento ocorre e voc quer realizar uma atualizao de menu,
    363 voc deve chamar {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()} para pedir
    364 que o sistema chame {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.</p>
    365 
    366 <p class="note"><strong>Observao:</strong> 
    367 voc nunca deve alterar os itens no menu de opes com base no {@link android.view.View} atualmente
    368 em foco. Quando estiver no modo de toque (quando o usurio no est usando cursor de bola ou um teclado), as vistas
    369 no podem ter foco, ento voc nunca deve usar o foco como base para modificar
    370 os itens no menu de opes. Se quiser fornecer itens de menu que sejam sensveis a contexto para um {@link
    371 android.view.View}, use um <a href="#context-menu">menu de contexto</a>.</p>
    372 
    373 
    374 
    375 
    376 <h2 id="context-menu">Criao de menus contextuais</h2>
    377 
    378 <div class="figure" style="width:420px;margin-top:-1em">
    379   <img src="{@docRoot}images/ui/menu-context.png" alt="" />
    380   <p class="img-caption"><strong>Figura 3.</strong> Capturas de tela de um menu de contexto flutuante (esquerda)
    381 e a barra de ao contextual (direita).</p>
    382 </div>
    383 
    384 <p>Um menu contextual oferece aes que afetam um item ou estrutura de contexto especfica na IU.
    385  possvel fornecer um menu de contexto para qualquer vista, mas ele  geralmente usado para itens em um {@link
    386 android.widget.ListView}, {@link android.widget.GridView}, ou em outras colees de vistas
    387 em que o usurio pode realizar aes diretas em cada item.</p>
    388 
    389 <p>H duas formas de fornecer aes contextuais:</p>
    390 <ul>
    391   <li>Em um <a href="#FloatingContextMenu">menu de contexto flutuante</a>. Um menu aparece como uma lista flutuante
    392 de itens de menu (semelhante a uma caixa de dilogo) quando o usurio realiza um clique longo (pressiona e segura)
    393 em uma vista que declara suporte para um menu de contexto. Os usurios podem realizar uma ao contextual
    394 em um item por vez.</li>
    395 
    396   <li>No <a href="#CAB">modo de ao contextual</a>. Este modo  uma implementao de sistema de
    397 {@link android.view.ActionMode} que exibe uma <em>barra de ao contextual</em> no topo da tela
    398 com itens de ao que afetam os itens selecionados. Quando este modo est ativo,
    399 os usurios podem realizar uma ao em vrios itens por vez (se o aplicativo permitir).</li>
    400 </ul>
    401 
    402 <p class="note"><strong>Observao:</strong> o modo de ao contextual est disponvel no Android 3.0 (API
    403 de nvel 11) e em posteriores e  a tcnica preferencial para exibir aes contextuais
    404 quando disponvel. Se o aplicativo for compatvel com verses mais antigas que a 3.0, ento voc deve retornar a um menu
    405 de contexto flutuante nestes dispositivos.</p>
    406 
    407 
    408 <h3 id="FloatingContextMenu">Criao de um menu de contexto flutuante</h3>
    409 
    410 <p>Para fornecer um menu de contexto flutuante:</p>
    411 <ol>
    412   <li>Registre o {@link android.view.View} ao qual o menu de contexto deve estar associado
    413 chamando {@link android.app.Activity#registerForContextMenu(View) registerForContextMenu()} e passe-o
    414 para {@link android.view.View}.
    415   <p>Se a atividade usar {@link android.widget.ListView} ou {@link android.widget.GridView}
    416 e voc quiser que cada item fornea o mesmo menu de contexto, registre todos os itens para um menu de contexto
    417 passando {@link android.widget.ListView} ou {@link android.widget.GridView} para {@link
    418 android.app.Activity#registerForContextMenu(View) registerForContextMenu()}.</p>
    419 </li>
    420 
    421   <li>Implemente o mtodo {@link
    422 android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()}
    423 em {@link android.app.Activity} ou {@link android.app.Fragment}.
    424   <p>Quando a vista registrada receber um evento de clique longo, o sistema chamar o mtodo {@link
    425 android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()}
    426 .  aqui que voc define os itens de menu, geralmente inflando um recurso de menu. Por
    427 exemplo:</p>
    428 <pre>
    429 &#64;Override
    430 public void onCreateContextMenu(ContextMenu menu, View v,
    431                                 ContextMenuInfo menuInfo) {
    432     super.onCreateContextMenu(menu, v, menuInfo);
    433     MenuInflater inflater = getMenuInflater();
    434     inflater.inflate(R.menu.context_menu, menu);
    435 }
    436 </pre>
    437 
    438 <p>{@link android.view.MenuInflater} permite que voc infle o menu de contexto de um <a href="{@docRoot}guide/topics/resources/menu-resource.html">recurso de menu</a>. Os parmetros do mtodo
    439 de retorno de chamada incluem o {@link android.view.View}
    440 que o usurio selecionou e um objeto {@link android.view.ContextMenu.ContextMenuInfo} que fornece
    441 informaes adicionais sobre o item selecionado. Se sua atividade tiver vrias vistas, em que cada uma fornea
    442 um menu de contexto diferente, voc deve usar esses parmetros para determinar qual menu de contexto
    443 deve ser inflado.</p>
    444 </li>
    445 
    446 <li>Implemente {@link android.app.Activity#onContextItemSelected(MenuItem)
    447 onContextItemSelected()}.
    448   <p>Quando o usurio selecionar um item de menu, o sistema chamar este mtodo para que voc possa realizar
    449 a ao adequada. Por exemplo:</p>
    450 
    451 <pre>
    452 &#64;Override
    453 public boolean onContextItemSelected(MenuItem item) {
    454     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    455     switch (item.getItemId()) {
    456         case R.id.edit:
    457             editNote(info.id);
    458             return true;
    459         case R.id.delete:
    460             deleteNote(info.id);
    461             return true;
    462         default:
    463             return super.onContextItemSelected(item);
    464     }
    465 }
    466 </pre>
    467 
    468 <p>O mtodo {@link android.view.MenuItem#getItemId()} consulta o ID
    469 para o item de menu selecionado, o qual pode ser atribudo a cada item de menu no XML usando o atributo {@code
    470 android:id}, como exibido na seo <a href="#xml">Definio de um menu em
    471 XML</a>.</p>
    472 
    473 <p>Ao lidar com um item de menu, retorne {@code true}. Se no lidar com o item de menu,
    474 voc dever passar o item de menu para a implementao de superclasse. Se a atividade incluir fragmentos,
    475 ela receber este retorno de chamada primeiro. Ao chamar a superclasse ao no lidar, o sistema
    476 passar o evento para o respectivo mtodo de retorno de chamada em cada fragmento, um por vez (na ordem
    477 em que cada fragmento foi adicionado) at que {@code true} ou {@code false} seja retornado. (A implementao
    478 padro para {@link android.app.Activity} e {@code android.app.Fragment} retorna {@code
    479 false}, ento voc deve sempre chamar a superclasse ao no tratar de um item de menu.)</p>
    480 </li>
    481 </ol>
    482 
    483 
    484 <h3 id="CAB">Uso do modo de ao contextual</h3>
    485 
    486 <p>O modo de ao contextual  uma implementao de sistema de {@link android.view.ActionMode}
    487 que direciona a interao do usurio a efetuar aes contextuais. Quando um usurio
    488 ativa este modo selecionando um item, uma <em>barra de ao contextual</em> aparece na parte superior da tela
    489 para apresentar as aes que o usurio pode realizar nos itens selecionados. Enquanto este modo estiver ativo,
    490 o usurio pode selecionar vrios itens (se voc permitir), desmarcar itens e continuar
    491 a navegar dentro da atividade (o tanto que voc permitir). O modo de ao
    492  desativado e a barra de ao contextual desaparece quando o usurio desmarca todos os itens, pressiona o boto VOLTAR,
    493 ou seleciona a ao <em>Pronto</em> na lateral esquerda da barra.</p>
    494 
    495 <p class="note"><strong>Observao:</strong> a barra de ao contextual no  necessariamente
    496 associada  <a href="{@docRoot}guide/topics/ui/actionbar.html">barra de ao</a>. Elas operam de forma independente,
    497 apesar de a barra de ao contextual ocupar visualmente a posio
    498 da barra de ao.</p>
    499 
    500 <p>Caso esteja desenvolvendo para Android 3.0 (API de nvel 11) e posteriores,
    501 voc deve usar o modo de ao contextual para apresentar aes contextuais, em vez de usar o <a href="#FloatingContextMenu">menu de contexto flutuante</a>.</p>
    502 
    503 <p>Para oferecer vistas que fornecem aes contextuais, voc deve invocar o modo de ao contextual
    504 sobre um dos eventos (ou ambos):</p>
    505 <ul>
    506   <li>O usurio realiza um clique longo na vista.</li>
    507   <li>O usurio seleciona uma caixa de seleo ou um componente de IU semelhante dentro da vista.</li>
    508 </ul>
    509 
    510 <p>A maneira do aplicativo de invocar o modo de ao contextual e definir o comportamento
    511 para cada ao depende do seu projeto. H basicamente dois projetos:</p>
    512 <ul>
    513   <li>Para aes contextuais em vistas arbitrrias individuais.</li>
    514   <li>Para aes contextuais de agrupadas em itens em um {@link
    515 android.widget.ListView} ou {@link android.widget.GridView} (permitindo que o usurio selecione vrios itens
    516 e realize uma ao em todos eles).</li>
    517 </ul>
    518 
    519 <p>As seguintes sees descrevem a configurao necessria para cada cenrio.</p>
    520 
    521 
    522 <h4 id="CABforViews">Ativao do modo de ao contextual para vistas individuais</h4>
    523 
    524 <p>Caso queira invocar o modo de ao contextual somente quando o usurio selecionar
    525 vistas especficas, voc deve:</p>
    526 <ol>
    527   <li>Implementar a interface {@link android.view.ActionMode.Callback}. Em seus mtodos de retorno de chamada,
    528  possvel especificar as aes da barra de ao contextual, responder aos eventos de clique em itens de ao,
    529 e tratar de outros eventos de ciclo de vida do modo de ao.</li>
    530   <li>Chame {@link android.app.Activity#startActionMode startActionMode()} quando quiser exibir
    531 a barra (como quando o usurio realiza cliques longos na visualizao).</li>
    532 </ol>
    533 
    534 <p>Por exemplo:</p>
    535 
    536 <ol>
    537   <li>Implementar a interface {@link android.view.ActionMode.Callback ActionMode.Callback}:
    538 <pre>
    539 private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
    540 
    541     // Called when the action mode is created; startActionMode() was called
    542     &#64;Override
    543     public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    544         // Inflate a menu resource providing context menu items
    545         MenuInflater inflater = mode.getMenuInflater();
    546         inflater.inflate(R.menu.context_menu, menu);
    547         return true;
    548     }
    549 
    550     // Called each time the action mode is shown. Always called after onCreateActionMode, but
    551     // may be called multiple times if the mode is invalidated.
    552     &#64;Override
    553     public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
    554         return false; // Return false if nothing is done
    555     }
    556 
    557     // Called when the user selects a contextual menu item
    558     &#64;Override
    559     public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
    560         switch (item.getItemId()) {
    561             case R.id.menu_share:
    562                 shareCurrentItem();
    563                 mode.finish(); // Action picked, so close the CAB
    564                 return true;
    565             default:
    566                 return false;
    567         }
    568     }
    569 
    570     // Called when the user exits the action mode
    571     &#64;Override
    572     public void onDestroyActionMode(ActionMode mode) {
    573         mActionMode = null;
    574     }
    575 };
    576 </pre>
    577 
    578 <p>Observe que esses retornos de chamada de eventos so quase exatamente iguais aos retornos de chamada do <a href="#options-menu">menu de opes</a>, exceto que cada um deles tambm passa o objeto {@link
    579 android.view.ActionMode} associado ao evento.  possvel usar APIs de {@link
    580 android.view.ActionMode} para realizar vrias alteraes ao CAB, como revisar um ttulo e um subttulo
    581 com {@link android.view.ActionMode#setTitle setTitle()} e {@link
    582 android.view.ActionMode#setSubtitle setSubtitle()} (til para indicar quantos itens
    583 so selecionados).</p>
    584 
    585 <p>Observe tambm que os exemplos acima definem a varivel {@code mActionMode} como nula quando
    586 o modo de ao  destrudo. Na etapa a seguir, voc ver como ela  inicializada
    587 e quo til salvar a varivel do membro na atividade ou no fragmento pode ser.</p>
    588 </li>
    589 
    590   <li>Chame {@link android.app.Activity#startActionMode startActionMode()} para ativar o modo de ao contextual
    591 quando apropriado, como em resposta a um clique longo em um {@link
    592 android.view.View}:</p>
    593 
    594 <pre>
    595 someView.setOnLongClickListener(new View.OnLongClickListener() {
    596     // Called when the user long-clicks on someView
    597     public boolean onLongClick(View view) {
    598         if (mActionMode != null) {
    599             return false;
    600         }
    601 
    602         // Start the CAB using the ActionMode.Callback defined above
    603         mActionMode = getActivity().startActionMode(mActionModeCallback);
    604         view.setSelected(true);
    605         return true;
    606     }
    607 });
    608 </pre>
    609 
    610 <p>Ao chamar {@link android.app.Activity#startActionMode startActionMode()}, o sistema
    611 retorna o {@link android.view.ActionMode} criado. Ao salvar isto em uma varivel do membro,
    612  possvel realizar alteraes na barra de ao contextual em resposta a outros eventos. No exemplo acima,
    613 {@link android.view.ActionMode}  usado para garantir que a instncia {@link android.view.ActionMode}
    614 no seja recriada se j estiver ativa, verificando se o membro  nulo antes de iniciar
    615 o modo de ao.</p>
    616 </li>
    617 </ol>
    618 
    619 
    620 
    621 <h4 id="CABforListView">Ativao de aes contextuais agrupadas em ListView ou GridView</h4>
    622 
    623 <p>Se tiver uma coleo de itens em um {@link android.widget.ListView} ou {@link
    624 android.widget.GridView} (ou outra extenso de {@link android.widget.AbsListView}) e quiser
    625 permitir que os usurios realizem aes de agrupamento, voc deve:</p>
    626 
    627 <ul>
    628   <li>Implementar a interface {@link android.widget.AbsListView.MultiChoiceModeListener} e defini-la
    629 para o grupo de visualizao com {@link android.widget.AbsListView#setMultiChoiceModeListener
    630 setMultiChoiceModeListener()}. Nos mtodos de retorno de chamada da escuta,  possvel especificar as aes
    631 para a barra de ao contextual, responder a eventos de clique em itens de ao e lidar com outros retornos de chamada
    632 herdados da interface {@link android.view.ActionMode.Callback}.</li>
    633 
    634   <li>Chame {@link android.widget.AbsListView#setChoiceMode setChoiceMode()} com o argumento {@link
    635 android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL}.</li>
    636 </ul>
    637 
    638 <p>Por exemplo:</p>
    639 
    640 <pre>
    641 ListView listView = getListView();
    642 listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    643 listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
    644 
    645     &#64;Override
    646     public void onItemCheckedStateChanged(ActionMode mode, int position,
    647                                           long id, boolean checked) {
    648         // Here you can do something when items are selected/de-selected,
    649         // such as update the title in the CAB
    650     }
    651 
    652     &#64;Override
    653     public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
    654         // Respond to clicks on the actions in the CAB
    655         switch (item.getItemId()) {
    656             case R.id.menu_delete:
    657                 deleteSelectedItems();
    658                 mode.finish(); // Action picked, so close the CAB
    659                 return true;
    660             default:
    661                 return false;
    662         }
    663     }
    664 
    665     &#64;Override
    666     public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    667         // Inflate the menu for the CAB
    668         MenuInflater inflater = mode.getMenuInflater();
    669         inflater.inflate(R.menu.context, menu);
    670         return true;
    671     }
    672 
    673     &#64;Override
    674     public void onDestroyActionMode(ActionMode mode) {
    675         // Here you can make any necessary updates to the activity when
    676         // the CAB is removed. By default, selected items are deselected/unchecked.
    677     }
    678 
    679     &#64;Override
    680     public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
    681         // Here you can perform updates to the CAB due to
    682         // an {@link android.view.ActionMode#invalidate} request
    683         return false;
    684     }
    685 });
    686 </pre>
    687 
    688 <p> isso. Agora, quando o usurio selecionar um item com um clique longo, o sistema chamar o mtodo {@link
    689 android.widget.AbsListView.MultiChoiceModeListener#onCreateActionMode onCreateActionMode()}
    690 e exibir a barra de ao contextual com as aes especificadas. Enquanto a barra de ao contextual
    691 estiver visvel, os usurios podero selecionar itens adicionais.</p>
    692 
    693 <p>Em alguns casos em que as aes contextuais fornecem itens de ao comuns, voc pode
    694 querer adicionar uma caixa de seleo ou um elemento de IU semelhante que permite que os usurios selecionem itens,
    695 pois eles podem no descobrir o comportamento do clique longo. Quando um usurio seleciona a caixa de seleo,
    696  possvel invocar o modo de ao contextual definindo o respectivo item de lista
    697 para o estado marcado com {@link android.widget.AbsListView#setItemChecked setItemChecked()}.</p>
    698 
    699 
    700 
    701 
    702 <h2 id="PopupMenu">Criao de um menu pop-up</h2>
    703 
    704 <div class="figure" style="width:220px">
    705 <img src="{@docRoot}images/ui/popupmenu.png" alt="" />
    706 <p><strong>Figura 4.</strong> Um menu pop-up no aplicativo do Gmail, ancorado ao boto
    707 de estouro no cando direito superior.</p>
    708 </div>
    709 
    710 <p>Um {@link android.widget.PopupMenu}  um menu modal ancorado a uma {@link android.view.View}.
    711 Ele aparece sob a vista de ncora se tiver espao, ou sobre a vista. Ele  til para:</p>
    712 <ul>
    713   <li>Fornecer um menu de estilo de estouro para aes que <em>se relacionam</em> com o contedo especfico (como
    714 cabealhos de e-mail do Gmail, exibidos na figura 4).
    715     <p class="note"><strong>Observao:</strong> Isto no  igual ao menu de contexto,
    716 que geralmente  usado para aes que <em>afetam</em> o contedo selecionado. Para aes que afetam o contedo
    717 selecionado, use o <a href="#CAB">modo de ao contextual</a> ou o <a href="#FloatingContextMenu">menu de contexto flutuante</a>.</p></li>
    718   <li>Fornecer uma segunda parte de uma sentena de comando (como um boto marcado como "Adicionar"
    719 que produz um menu pop-up com opes diferentes de "Adicionar").</li>
    720   <li>Fornecer um menu suspenso semelhante a {@link android.widget.Spinner} que no retenha
    721 uma seleo persistente.</li>
    722 </ul>
    723 
    724 
    725 <p class="note"><strong>Observao:</strong> {@link android.widget.PopupMenu} est disponvel com a API
    726 de nvel 11 ou posteriores.</p>
    727 
    728 <p>Se <a href="#xml">definir o menu em XML</a>, abaixo  exposto o modo de exibir o menu pop-up:</p>
    729 <ol>
    730   <li>Represente um {@link android.widget.PopupMenu} com seu construtor,
    731 que usa o aplicativo {@link android.content.Context} e {@link android.view.View} atual ao qual o menu
    732 deve ser ancorado.</li>
    733   <li>Use {@link android.view.MenuInflater} para inflar o recurso de menu no objeto {@link
    734 android.view.Menu} retornado por {@link
    735 android.widget.PopupMenu#getMenu() PopupMenu.getMenu()}. Em APIs de nvel 14 ou posteriores,  possvel usar
    736 {@link android.widget.PopupMenu#inflate PopupMenu.inflate()}.</li>
    737   <li>Chame {@link android.widget.PopupMenu#show() PopupMenu.show()}.</li>
    738 </ol>
    739 
    740 <p>Por exemplo, a seguir h um boto com o atributo {@link android.R.attr#onClick android:onClick}
    741 que exibe um menu pop-up:</p>
    742 
    743 <pre>
    744 &lt;ImageButton
    745     android:layout_width="wrap_content" 
    746     android:layout_height="wrap_content" 
    747     android:src="@drawable/ic_overflow_holo_dark"
    748     android:contentDescription="@string/descr_overflow_button"
    749     android:onClick="showPopup" />
    750 </pre>
    751 
    752 <p>A atividade pode ento exibir o menu pop-up desta forma:</p>
    753 
    754 <pre>
    755 public void showPopup(View v) {
    756     PopupMenu popup = new PopupMenu(this, v);
    757     MenuInflater inflater = popup.getMenuInflater();
    758     inflater.inflate(R.menu.actions, popup.getMenu());
    759     popup.show();
    760 }
    761 </pre>
    762 
    763 <p>Em APIs de nvel 14 ou posteriores,  possvel combinar as duas linhas que inflam o menu com {@link
    764 android.widget.PopupMenu#inflate PopupMenu.inflate()}.</p>
    765 
    766 <p>O menu  dispensado quando o usurio seleciona um item ou toca fora
    767 da rea do menu.  possvel ouvir o evento de dispensa usando {@link
    768 android.widget.PopupMenu.OnDismissListener}.</p>
    769 
    770 <h3 id="PopupEvents">Tratamento de eventos de clique</h3>
    771 
    772 <p>Para realizar uma ao
    773 quando o usurio seleciona um item de menu, voc deve implementar a interface {@link
    774 android.widget.PopupMenu.OnMenuItemClickListener} e registr-la com {@link
    775 android.widget.PopupMenu} chamando {@link android.widget.PopupMenu#setOnMenuItemClickListener
    776 setOnMenuItemclickListener()}. Quando o usurio seleciona um item, o sistema chama o retorno de chamada {@link
    777 android.widget.PopupMenu.OnMenuItemClickListener#onMenuItemClick onMenuItemClick()}
    778 na interface.</p>
    779 
    780 <p>Por exemplo:</p>
    781 
    782 <pre>
    783 public void showMenu(View v) {
    784     PopupMenu popup = new PopupMenu(this, v);
    785 
    786     // This activity implements OnMenuItemClickListener
    787     popup.setOnMenuItemClickListener(this);
    788     popup.inflate(R.menu.actions);
    789     popup.show();
    790 }
    791 
    792 &#64;Override
    793 public boolean onMenuItemClick(MenuItem item) {
    794     switch (item.getItemId()) {
    795         case R.id.archive:
    796             archive(item);
    797             return true;
    798         case R.id.delete:
    799             delete(item);
    800             return true;
    801         default:
    802             return false;
    803     }
    804 }
    805 </pre>
    806 
    807 
    808 <h2 id="groups">Criao de grupos de menu</h2>
    809 
    810 <p>Um grupo de menu  uma coleo de itens de menu que compartilham certas peculiaridades. Com um grupo,
    811  possvel:</p>
    812 <ul>
    813   <li>Exibir ou ocultar todos os itens com {@link android.view.Menu#setGroupVisible(int,boolean)
    814 setGroupVisible()}</li>
    815   <li>Ativar ou desativar todos os itens com {@link android.view.Menu#setGroupEnabled(int,boolean)
    816 setGroupEnabled()}</li>
    817   <li>Especificar se todos os itens so marcveis com {@link
    818 android.view.Menu#setGroupCheckable(int,boolean,boolean) setGroupCheckable()}</li>
    819 </ul>
    820 
    821 <p> possvel criar um grupo aninhando elementos {@code &lt;item&gt;} dentro de um elemento {@code &lt;group&gt;}
    822 no recurso de menu ou especificando um ID de grupo com o mtodo {@link
    823 android.view.Menu#add(int,int,int,int) add()}.</p>
    824 
    825 <p>Abaixo h um exemplo de recurso de menu que inclui um grupo:</p>
    826 
    827 <pre>
    828 &lt;?xml version="1.0" encoding="utf-8"?&gt;
    829 &lt;menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    830     &lt;item android:id="@+id/menu_save"
    831           android:icon="@drawable/menu_save"
    832           android:title="@string/menu_save" /&gt;
    833     &lt;!-- menu group --&gt;
    834     &lt;group android:id="@+id/group_delete"&gt;
    835         &lt;item android:id="@+id/menu_archive"
    836               android:title="@string/menu_archive" /&gt;
    837         &lt;item android:id="@+id/menu_delete"
    838               android:title="@string/menu_delete" /&gt;
    839     &lt;/group&gt;
    840 &lt;/menu&gt;
    841 </pre>
    842 
    843 <p>Os itens que esto no grupo aparecem no mesmo nvel que o primeiro item &mdash; todos os trs itens
    844 no menu so irmos. No entanto,  possvel modificar as peculiaridades dos dois itens
    845 no grupo mencionando o ID do grupo e usando os mtodos listados acima. O sistema
    846 tambm nunca separar os itens agrupados. Por exemplo, se voc declarar {@code
    847 android:showAsAction="ifRoom"} para cada item, eles aparecero na barra de ao
    848 ou no estouro de ao.</p>
    849 
    850 
    851 <h3 id="checkable">Uso de itens de menu marcveis</h3>
    852 
    853 <div class="figure" style="width:200px">
    854   <img src="{@docRoot}images/radio_buttons.png" height="333" alt="" />
    855   <p class="img-caption"><strong>Figura 5.</strong> Captura de tela de um submenu
    856 com itens marcveis.</p>
    857 </div>
    858 
    859 <p>Um menu como uma interface pode ser til para ativar e desativar as opes, usar uma caixa de seleo
    860 para opes independentes ou botes de rdio para grupos
    861 de opes mutuamente exclusivas. A figura 5 mostra um submenu com itens marcveis
    862 com botes de rdio.</p>
    863 
    864 <p class="note"><strong>Observao:</strong> os itens de menu no menu de cones (do menu de opes)
    865 no podem exibir uma caixa de seleo ou um boto de rdio. Caso escolha tornar marcveis os itens no menu de cones,
    866 voc dever indicar manualmente o estado marcado arrastando o cone e/ou digitando
    867 sempre que o estado for alterado.</p>
    868 
    869 <p> possvel definir o comportamento marcvel para itens individuais de menu usando o atributo {@code
    870 android:checkable} no elemento {@code &lt;item&gt;}, ou para um grupo inteiro
    871 com o atributo {@code android:checkableBehavior} no elemento {@code &lt;group&gt;}. Por exemplo,
    872 todos os itens neste grupo de menu so marcveis com um boto de rdio:</p>
    873 
    874 <pre>
    875 &lt;?xml version="1.0" encoding="utf-8"?&gt;
    876 &lt;menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    877     &lt;group android:checkableBehavior="single"&gt;
    878         &lt;item android:id="@+id/red"
    879               android:title="@string/red" /&gt;
    880         &lt;item android:id="@+id/blue"
    881               android:title="@string/blue" /&gt;
    882     &lt;/group&gt;
    883 &lt;/menu&gt;
    884 </pre>
    885 
    886 <p>O atributo {@code android:checkableBehavior} aceita:
    887 <dl>
    888   <dt>{@code single}</dt>
    889     <dd>Somente um item do grupo pode ser marcado (botes de rdio)</dd>
    890   <dt>{@code all}</dt>
    891     <dd>Todos os itens podem ser marcados (caixas de seleo)</dd>
    892   <dt>{@code none}</dt>
    893     <dd>Nenhum item  marcvel</dd>
    894 </dl>
    895 
    896 <p> possvel aplicar um estado marcado padro a um item usando o atributo {@code android:checked}
    897 no elemento {@code &lt;item&gt;} e alterar o seu cdigo com o mtodo {@link
    898 android.view.MenuItem#setChecked(boolean) setChecked()}.</p>
    899 
    900 <p>Quando um item marcvel  selecionado, o sistema chama o respectivo mtodo retorno de chamada do item selecionado
    901 (como {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}).  aqui
    902 que voc deve definir o estado da caixa de seleo, pois a caixa de seleo ou o boto de rdio
    903 no altera o seu estado automaticamente.  possvel consultar o estado do item (como ele era antes
    904 do usurio selecion-lo) com {@link android.view.MenuItem#isChecked()} e, em seguida, definir o estado marcado com 
    905 {@link android.view.MenuItem#setChecked(boolean) setChecked()}. Por exemplo:</p>
    906 
    907 <pre>
    908 &#64;Override
    909 public boolean onOptionsItemSelected(MenuItem item) {
    910     switch (item.getItemId()) {
    911         case R.id.vibrate:
    912         case R.id.dont_vibrate:
    913             if (item.isChecked()) item.setChecked(false);
    914             else item.setChecked(true);
    915             return true;
    916         default:
    917             return super.onOptionsItemSelected(item);
    918     }
    919 }
    920 </pre>
    921 
    922 <p>Caso voc no defina o estado marcado desta maneira, o estado visvel do item (a caixa de seleo
    923 ou o boto de rdio)
    924 no se alterar quando o usurio selecion-lo. Quando o estado  definido, a atividade preserva o estado marcado
    925 do item para que, quando o usurio abrir o menu posteriormente, o estado marcado
    926 definido esteja visvel.</p>
    927 
    928 <p class="note"><strong>Observao:</strong>
    929 os itens de menu marcveis servem para serem usados somente em uma base por sesso e no so salvos quando
    930 o aplicativo  destrudo. Caso tenha configuraes de aplicativo que gostaria de salvar para o usurio,
    931 voc deve armazenar os dados usando as <a href="{@docRoot}guide/topics/data/data-storage.html#pref">preferncias compartilhadas</a>.</p>
    932 
    933 
    934 
    935 <h2 id="intents">Adio de itens de menu com base em uma inteno</h2>
    936 
    937 <p>s vezes, voc desejar que um item de menu inicie uma atividade usando uma {@link android.content.Intent}
    938 (se  uma atividade no seu ou em outro aplicativo). Quando voc sabe qual inteno
    939 quer usar e tem um item de menu especfico que deve iniciar a inteno,  possvel execut-la
    940 com {@link android.app.Activity#startActivity(Intent) startActivity()} durante
    941 o mtodo de retorno de chamada selecionado no item (como o retorno de chamada {@link
    942 android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}).</p>
    943 
    944 <p>No entanto, caso no tenha certeza de que o dispositivo
    945 do usurio contm um aplicativo que lida com a inteno, adicionar um item que o invoca
    946 resulta em um item de menu que no funciona, pois a inteno pode no se resolver
    947 em uma atividade. Para resolver isto, o Android permite que voc adicione itens de menu dinamicamente ao seu menu
    948 quando encontra atividades no dispositivo que lidam com a inteno.</p>
    949 
    950 <p>Para adicionar itens de menu com base nas atividades disponveis que aceitam uma inteno:</p>
    951 <ol>
    952   <li>Defina a inteno
    953 com a categoria {@link android.content.Intent#CATEGORY_ALTERNATIVE}
    954 e/ou {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE}, alm de quaisquer outros requisitos.</li>
    955   <li>Chame {@link
    956 android.view.Menu#addIntentOptions(int,int,int,ComponentName,Intent[],Intent,int,MenuItem[])
    957 Menu.addIntentOptions()}. O Android procura um aplicativo que possa realizar a inteno
    958 e adiciona-o ao seu menu.</li>
    959 </ol>
    960 
    961 <p>Se no houver nenhum aplicativo instalado
    962 que satisfaa a inteno, nenhum item de menu ser adicionado.</p>
    963 
    964 <p class="note"><strong>Observao:</strong>
    965 {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE}  usado para lidar com o elemento atualmente selecionado
    966 na tela. Portanto, ele deve ser usado apenas ao criar um menu em {@link
    967 android.app.Activity#onCreateContextMenu(ContextMenu,View,ContextMenuInfo)
    968 onCreateContextMenu()}.</p>
    969 
    970 <p>Por exemplo:</p>
    971 
    972 <pre>
    973 &#64;Override
    974 public boolean onCreateOptionsMenu(Menu menu){
    975     super.onCreateOptionsMenu(menu);
    976 
    977     // Create an Intent that describes the requirements to fulfill, to be included
    978     // in our menu. The offering app must include a category value of Intent.CATEGORY_ALTERNATIVE.
    979     Intent intent = new Intent(null, dataUri);
    980     intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
    981 
    982     // Search and populate the menu with acceptable offering applications.
    983     menu.addIntentOptions(
    984          R.id.intent_group,  // Menu group to which new items will be added
    985          0,      // Unique item ID (none)
    986          0,      // Order for the items (none)
    987          this.getComponentName(),   // The current activity name
    988          null,   // Specific items to place first (none)
    989          intent, // Intent created above that describes our requirements
    990          0,      // Additional flags to control items (none)
    991          null);  // Array of MenuItems that correlate to specific items (none)
    992 
    993     return true;
    994 }</pre>
    995 
    996 <p>Para cada atividade encontrada que fornece um filtro de inteno correspondente  inteno definida,
    997 um item de menu  adicionado, usando o valor no <code>android:label</code> do filtro de inteno
    998 como o ttulo do item e o cone do aplicativo como o cone do item de menu. O mtodo
    999 {@link android.view.Menu#addIntentOptions(int,int,int,ComponentName,Intent[],Intent,int,MenuItem[])
   1000 addIntentOptions()} retorna o nmero de itens de menu adicionados.</p>
   1001 
   1002 <p class="note"><strong>Observao:</strong> Ao chamar {@link
   1003 android.view.Menu#addIntentOptions(int,int,int,ComponentName,Intent[],Intent,int,MenuItem[])
   1004 addIntentOptions()}, ele substitui todos os itens de menu no grupo do menu especificado
   1005 no primeiro argumento.</p>
   1006 
   1007 
   1008 <h3 id="AllowingToAdd">Permisso para a atividade ser adicionada a outros menus</h3>
   1009 
   1010 <p>Voc pode tambm oferecer os servios da sua atividade para outros aplicativos,
   1011 para que o aplicativo possa ser includo no menu de outros (revertendo as funes descritas acima).</p>
   1012 
   1013 <p>Para ser includo nos menus de outros aplicativos, voc precisa definir
   1014 um filtro de inteno como normalmente faz, mas certificando-se de incluir os valores {@link android.content.Intent#CATEGORY_ALTERNATIVE}
   1015 e/ou {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} para a categoria
   1016 do filtro de inteno. Por exemplo:</p>
   1017 <pre>
   1018 &lt;intent-filter label="&#64;string/resize_image">
   1019     ...
   1020     &lt;category android:name="android.intent.category.ALTERNATIVE" />
   1021     &lt;category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
   1022     ...
   1023 &lt;/intent-filter>
   1024 </pre>
   1025 
   1026 <p>Leia mais sobre a criao de filtros de inteno no documento 
   1027 <a href="/guide/components/intents-filters.html">Intenes e filtros de intenes</a>.</p>
   1028 
   1029 <p>Para obter um exemplo de aplicativo que usa esta tcnica, consulte o cdigo de exemplo do 
   1030 <a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Bloco
   1031 de notas</a>.</p>
   1032