Cursos / Informática para Internet / Dispositivos Móveis / Aula

arrow_back Aula 07 - Interfaces Gráficas III

Menus no Android

Context Menus

Os Context Menus, como o nome sugere, são menus que estão ligados a um contexto. No caso do Android, esse contexto é representado por uma View. Esses menus são bastante parecidos com menus de contexto utilizados em computadores, ao pressionar o botão direito sobre algum componente, por exemplo. No Android, esses menus costumam ser ativados através de um toque longo em cima de uma View. Ao serem lançados, os menus de contexto passam a flutuar sobre a Activity, como vemos na Figura 3, permitindo que o usuário escolha uma das opções disponíveis para aquele elemento.

Menu de Contexto.

É importante notar que, mais uma vez, há uma diferenciação entre os aparelhos na versão anterior a 3.0 e nos que tem essa versão ou superior. No caso dos aparelhos 3.0, que possuem a ActionBar substituindo o menu de opções, como vimos anteriormente, uma barra de ações contextualizadas com o componente ativo são a maneira de utilizar o menu de contexto. Ainda assim, é possível utilizar o menu flutuante nesses aparelhos, já que os menus são invocados com toques na tela e não dependem de teclas. Para criarmos um menu de contexto devemos seguir alguns passos:

  1. Registrar a View como parte do contexto do menu utilizando o método registerForContextMenu(), passando a View como parâmetro. Desse modo, ao ser tocada, a View torna-se capaz de invocar o menu de contexto.
  2. Redefinir, na Activity, o método onCreateContextMenu(), responsável pela criação do menu de contexto. Ao redefinir esse método, a Activity passa a ser capaz de criar um menu de contexto ao ser requisitada pelo Android. Diferentemente do menu de opções, esse método é sempre chamado antes da criação do menu flutuante, seja a primeira vez ou não.
  3. Redefinir o método onContextItemSelected(), responsável por passar para a Activity qual dos itens do menu foi selecionado. É nesse método que devem ser implementados os comportamentos do menu.

Vejamos agora duas listagens contendo exemplos de como fazer cada um desses passos. No caso dos Context Menus, o XML é implementado da mesma maneira do Options Menu, então, confira a Listagem 5 para relembrar como deve-se declarar o XML para um Menu. Na Listagem 7 vemos um exemplo de como carregar o menu de contexto, através da função onCreateContextMenu(), e, na Listagem 8, vemos como tratar os eventos de seleção nesse menu.

Listagem 7 – Redefinição do método onCreateContextMenu()
Listagem 8 – Redefinição do método onContextItemSelected().

A utilização dessas funções, como podemos ver, é bem similar a das funções utilizadas no Options Menu. Da mesma maneira que função anterior, é importante perceber que, no caso da função onCreateContextMenu(), o método super deve ser chamado logo no início da função, para permitir ao Android fazer os ajustes necessários para a exibição do menu. Já no método onContextItemSelected(), o retorno é o caso padrão, que indica a função que o evento que lhe foi passado não pertence a ela, por não ter sido consumido por nenhum dos casos anteriores.

Outro ponto importante, principalmente para aplicações que possuem muitos itens a serem colocados nos menus, é a possibilidade da utilização de submenus. No Android, não é possível aninhar os menus, ou seja, ir exibindo-os lado a lado, após seleção. As razões para isso é o espaço limitado das telas dos smartphones. A maneira encontrada é a utilização de grupos, que são carregados a medida que suas opções são selecionadas em menus anteriores. A Listagem 9 contém o exemplo de um submenu, declarado dentro de uma opção do menu pai.

Listagem 9 – Submenu referente à opção File.

Com a utilização de submenus, é possível incluir opções dentro de outras, evitando assim menus muito grandes, com opções que nem sempre são pertinentes. Sendo capaz de expandir opções referentes a um item, após ele ter sido selecionado, tornando os menus bem mais compactos e eficientes para os usuários que o estão utilizando.

Versão 5.3 - Todos os Direitos reservados