sexta-feira, 2 de novembro de 2012

Menus


Olá à todos.

Neste post, será apresentado o conceito de Menus em Android.

Em dispositivos que possuem sistema operacional Android, geralmente existem 3 botões físicos: Home, Back e Menu. O botão Home é o botão que volta à tela inicial, e que, quando segurado, mostra ao usuário todos os aplicativos abertos no momento. O botão Back é o botão que sai da tela corrente do sistema. E o botão Menu é um botão que chama funcionalidades próprias em cada aplicação. Isso varia de aplicação para aplicação.

Existem vários tipos de menu em Android:

  • Options Menu  Este é o tipo de menu mais comum em Android. Para ele ser chamado, basta clicar no botão físico de menu.
  • Context Menu  Este menu é chamado quando clicamos e seguramos um determinado componente visual do Android, como um botão. Ao fazer isso, será mostrada na tela uma lista de opções, que é o nosso menu de contexto.
  • PopUp Menu  Esta é a implementação de menu mais atual. Esse Menu é mostrado nas chamadas Action Bar, que são barras de ferramentas mostradas na parte superior da tela. As Action Bar foram criadas em Android a partir da API 11 (3.0, ou Honeycomb), e desde então aparecem em todas as versões de API subsequentes. Esses menus aparecem nas Action Bar, e em dispositivos Android que não possuem botão físico de menu.

Estes tipos de menu serão apresentados abaixo, sendo divididos em 3 diferentes seções.

Options Menu
Um Option Menu é mostrado abaixo.


Ele pode ser chamado tanto pelo código-fonte Java, quanto por um arquivo XML. Em ambos os casos, a implementação de um menu é feita pelo método public boolean onCreateOptionsMenu(Menu menu). Abaixo é mostrado a criação de um menu via Java:


No código-fonte acima, podemos notar que existem 4 argumentos no método MenuItem.add. São eles:

  • grupo → Utilizado para definir em qual grupo o menu deve aparecer. Geralmente este valor é 0.
  • id →  dentificador do item do menu. Esse parâmetro é utilizado para diferenciar as ações geradas pelo menu. Cada evento deve realizar uma ação diferente, e para isso o id do item pode ser utilizado. Geralmente é criada uma constante para identificar cada item.
  • ordem → Indica a ordem desse item, ou 0 se a ordem não é importante.
  • texto → Representa o texto dessa opção de menu.

E agora, abaixo, temos a criação das opções de menu via XML.


E como ele é referenciado em Java.


Para chamar este menu, basta clicar no botão físico de Menu. Então, as opções de menu serão mostradas na tela. E para que alguma ação ocorra ao clicar em alguma opção de menu, precisamos usar um outro evento, chamado public boolean onOptionsItemSelected(MenuItem item). A declaração desta função é mostrada abaixo.


Repare acima que a seleção da opção de menu é realizada através de comandos if em vários id. Este é o procedimento correto quando temos um menu declarado em XML. Porém, e se declarássemos o menu programaticamente, em Java? Aí então tal verificação seria feitas por comandos if, buscando as constantes MENU_1 até MENU_4.

Voltando à nossa explicação anterior: a execução da ação descrita na imagem acima é mostrada abaixo.


E pronto! Já sabemos como criar um Options Menu.

Context Menu
Este tipo de menu é ativado quando clicamos e seguramos em algum componente visual, como um Button. Um Context Menu é mostrado abaixo.


Para invocar um Context Menu, precisamos declarar algumas funções no código-fonte do Java. A imagem abaixo mostra o código-fonte.


Repare que nesse código-fonte temos novos eventos e métodos. São eles:


  • registerForContextMenu(mButton) → Com este método, registramos qual componente visual receberá o evento de menu de contexto.
  • public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) → Com este método, fazemos o trabalho análogo ao método onCreateOptionMenu. Ou seja, informamos qual é o arquivo de XML que contém as opções de menu que serão disparadas pelo menu de contexto.
  • public boolean onContextItemSelected(MenuItem item) → Faz o trabalho análogo ao método onOptionsItemSelected. Ou seja, chama a ação que a opção de menu clicada possui.


Não há muito segredo sobre o Context Menu. Basicamente são essas as opções que ele nos dá.

PopUp Menu
Até agora, aprendemos como chamar um OptionsMenu e um ContextMenu. Ambos podem ser usados ao mesmo tempo. Porém, com o PopUpMenu, a situação é um pouco diferente.

Um PopUpMenu é mostrado abaixo:


O PopUpMenu é um menu que é mostrado na ActionBar de uma Activity. Uma ActionBar é um componente que foi criado em Android a partir da API 11 (3.0, ou Honeycomb). Elas são barras de ferramentas mostradas na parte superior da tela. Desde que foram criadas, aparecem em todas as versões de API subsequentes.

Porém, com a criação deste menu, os OptionsMenu pararam de funcionar. Ou seja, nas versões de Android superiores à 3.0, os OptionsMenu não funcionam mais de maneira nativa. Há maneiras de fazê-lo funcionar, mas elas são menos ortodoxas que o padrão.

Para usarmos um PopUpMenu, basta estarmos em um projeto com API 3.0 (ou superior), e utilizar os mesmos métodos e eventos explicados acima, na seção sobre OptionsMenu.

Para maiores informações, uma boa dica é este link.

-----

Isso é tudo. Agora somos capazes de chamar menus em nossas aplicações de Android. Existem muitas outras opções de menu, mas as principais (e mais usadas) foram expostas neste tópico.

Caso alguém tenha uma dúvida, crítica ou sugestão, sinta-se à vontade.