Caso prefira, você encontrará todo esse material, em inglês, no site do Developer Android. A tradução e comentários dos materiais eu faço livremente para ajudar a comunidade que fala português.

segunda-feira, 28 de fevereiro de 2011

Interface de Usuários - Criando menus de contexto e submenus

Um menu de contexto é conceitualmente similar ao menu mostrado quando o usuário clica com o botão direito no PC. Você deve usar menus de contexto dar acesso aos usuários às ações pertinentes a um item específico de uma interface de usuário. No Android, o menu de contexto é mostrado quando o usuário pressiona e segura por  um tempo um botão ou item.

Você pode criar um menu de contexto para qualquer View, apesar de menus de contexto serem mais comuns para itens de um a ListView. Quando o usuário pressiona e segura por um tempo um item em uma ListView e a lista está registrada para prover um menu de contexto, o item da lista mostra ao usuário que um menu de contexto está disponível com uma animação em sua cor de fundo - transição do laranja para o branco antes de abrir o menu de contexto).

Para que uma View possa prover um menu de contexto, você deve registrar a view para um menu de contexto. Chame o método registerForContextMenu() e passe o nome da View à qual você quer dar um menu de contexto. Quando essa view receber a ação correta, ele mostrará o menu de contexto.

Para definir a aparência de um menu de contexto e comportamento, faça um override dos métodos de menu onCreateContextMenu e onContextItemSelected.

Por exemplo, aqui está o método onCreateContextMenu() que usa o recurso context_menu.xml:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                                ContextMenuInfo menuInfo) {
     super.onCreateContextMenu(menu, v, menuInfo);
     MenuInflater inflater = getMenuInflater();
     inflater.inflate(R.menu.context_menu, menu);
}
O MenuInflater é usado para inflar o menu de contexto de um menu de recurso. Os parâmetros para o método de callback incluem a View que o usuário selecionou e o objeto ContextMenu.ContextMenuInfo que provê informações adicionais sobre o item selecionado. Você deve usar esses parâmetros para determinar qual contexto de menu deverá ser criado, mas nesse exemplo, todos os menus de contexto na atividade são o mesmo.

Então quando o usuário selecionar um item do menu de contexto, o sistema chama o método onContextItemSelected(). Aqui está um exemplo de como você pode processar itens selecionados:

@Override
public boolean onContextItemSelected(MenuItem item) {
  AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
  switch (item.getItemId()) {
  case R.id.edit:
    editNote(info.id);
    return true;
  case R.id.delete:
    deleteNote(info.id);
    return true;
  default:
    return super.onContextItemSelected(item);
  }
}
A estrutura do código acima é similar ao código do post anterior, que faz com que o getItemId() retorne o ID do item de menu selecionado e faz a verificação de qual foi selecionado para performar a ação correta.

Criando Submenus

Um submenu é um menu que o usuário pode abrir selecionando um item em outro menu. Você adicionar um submenu para qualquer menu (exceto um submenu). Submenus são úteis quando sua aplicação tem muitas funções que você precisa organizar em tópicos, como itens de um PC (Arquivo, Editar, Ver, etc).

Quando criar um recurso de menu, você pode criar um submenu adicionando um elemento <menu> como filho de um item <item>. Por exemplo:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/file"
          android:icon="@drawable/file"
          android:title="@string/file" >
        <!-- "file" submenu -->
        <menu>
            <item android:id="@+id/create_new"
                  android:title="@string/create_new" />
            <item android:id="@+id/open"
                  android:title="@string/open" />
        </menu>
    </item>
</menu>
Quando o usuário seleciona um item de um submenu, o menu pai faz a seleção do método callback que recebe o evento.

0 comentários:

Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Related Posts Plugin for WordPress, Blogger...