sexta-feira, 18 de maio de 2012

Android – Trabalhando com Menus via XML e Java


Neste artigo abordarei um assunto muito interessante em se tratando de programação Android, a criação de Menus. Continuo utilizando a versão 2.2 do Android. Existem duas formas para se trabalhar com menus, sendo:

- Criação de Menus via XML.
- Criação de Menus via codificação Java.

O resultado obtido é o mesmo, só mudando a forma de programar.

Utilizando o guia On-Line

Antes de colocarmos a mão na massa gostaria de explorar a documentação do Sistema Android encontrada no site:

Muitos programadores não usam este guia On-line, eu reforço que é de extrema importância a utilização do mesmo para fins de aprendizado. Navegue até o item “Reference” e obtemos ali todas as informações necessárias para o desenvolvimento do exemplo neste artigo, no nosso caso localize o item “Android.View” e escolha a interface “Menu” ou “MenuItem”. Ver Imagem 01.


Figura 01: Guia Prático On-line.


Conceitos Básicos

Podemos trabalhar com vários tipos de Menus, como: Menus de Contextos, Menus de Opções e Sub-Menus. Neste artigo Sobrescrevemos alguns métodos da classe Activity utilizando o “Override”, que no português significa Sobrescrita. Sendo:


Método
Descrição
public boolean onCreateOptionsMenu(Menu menu) 

Método booleano responsável pela criação dos itens do Menu, Sub-Menu ou Menus de Contexto.
public boolean onOptionsItemSelected(MenuItem item)

Método booleano responsável por chamar as rotinas dos itens dos menus.

Criação de Menus Via XML

O primeiro passo seria criar um Projeto Android clicando em “File/New/Android Project...” definindo o nome como “Menu_Xml”. Localize o diretório “res” e crie uma pasta chamada “menu”. Dentro desta pasta criamos o arquivo XML responsável pela criação do Menu. Para isto clique com o botão direito escolhendo New/Other e definindo o nome para “lista.xml”, ver imagem 02.


Figura 02: Arquivo lista.xml.


Logo em seguida adicione algumas imagens no diretório “drawable” seguindo praticamente os mesmos passos descritos anteriormente. Estas imagens servirão de ícones para o Menu.
Neste arquivo iremos definir o id, o nome e a imagem para ser utilizada no menu, segue adiante a codificação.


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
      android:id="@+id/cadastrar"
      android:title="Cadastrar"
      android:icon="@drawable/img01"/>
    <item
      android:id="@+id/Movimentos"
      android:title="Movimentos"
      android:icon="@drawable/img02"/>
    <item
      android:id="@+id/Caixa"
      android:title="Caixa"
      android:icon="@drawable/img03"/>
</menu>

É muito simples, utilizamos apenas duas TAGS, sendo: a primeira o Menu e a segunda os Itens. O Xml deverá ficar idêntico ao da Imagem 03.

Figura 03: Android Menu.


Todas as imagens utilizadas no exemplo estarão disponibilizadas no final do artigo junto com o exemplo.
Localize a classe “Menu_xmlActivity” para implementarmos os métodos descritos acima. Importe os pacotes:

import pct.Menu_xml.R.id;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

Logo após o método OnCreate() sobrescreva os métodos abaixo:

@Override
public boolean onCreateOptionsMenu(Menu menu)      
{
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.lista, menu);
    return super.onCreateOptionsMenu(menu);
}

A Classe MenuInflater é responsável por capturar todos os itens do menu localizado no arquivo XML criado anteriormente. Note que temos um “return” que nos devolve a classe pai do método sobrescrito.

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
//Realizar um case pelo “Id” dos itens e logo em seguida mostrar uma mensagem ao usuário
  switch (item.getItemId())
  {     
   case id.cadastrar: Mensagem("Cadastrar", "The Club - Cadastro!");
   break;
   case id.Movimentos: Mensagem("Movimentos", "The Club –
   Movimentos!");
   break;
   case id.Caixa: Mensagem("Caixa", "The Club - Caixa!");
   break;    
  }
   //Retornar a classe pai
   return super.onOptionsItemSelected(item);
}


//Rotina para exibir mensagem ao usuário
public void Mensagem(String titulo, String texto)
{
AlertDialog.Builder mensagem = new          AlertDialog.Builder(Menu_xmlActivity.this);
   mensagem.setTitle(titulo);
   mensagem.setMessage(texto);
   mensagem.setNeutralButton("OK", null);
   mensagem.show();
}


Já método booleano OnOptionsItemSelected() é responsável por tratar os itens pela sua identificação “getItemId”. Este método é responsável por chamar as rotinas necessárias ao utilizar os itens de Menu. O projeto de Menu em XML deverá ficar identido ao da Figura 04.

Figura 04: Menu XML em Run-Time.


Criação de Menus Via programação Java

A criação de Menus Via Programação é parecida com via XML, a única diferença é que não precisaremos do arquivo XML, ou seja, programaremos todo o código. Para isto crie outro Projeto Android clicando em “File/New/Android Project...” definindo o nome como “Menu_Java”. Localize o diretório “src” para implementarmos em nossa “Activity” o código necessário. Faremos um pouco diferente neste exemplo, programaremos a interface “Sub menus”. Veja a seguir o código:
Importe os pacotes:


import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;

Logo após o método OnCreate() sobrescreva os métodos abaixo:

@Override
public boolean onCreateOptionsMenu(Menu menu)      
{
    boolean resultado = super.onCreateOptionsMenu(menu);
    super.onCreateOptionsMenu(menu);
    menu.add(0,1,0,"Cadastros").setIcon(R.drawable.img01);
    menu.add(0,2,0,"Movimentos").setIcon(R.drawable.img02);
    menu.add(0,3,0,"Caixa").setIcon(R.drawable.img03);
   
    SubMenu utilitario = menu.addSubMenu("Relatórios").setIcon(R.drawable.img04);
    utilitario.add(0,4,0,"Contas a Pagar");
    utilitario.add(0,5,0,"Contas a Receber");
        
    return resultado;
}


Neste caso não utilizamos a classe MenuInflater, pois estamos criando o menu e os itens do sub-menu via programação. O objeto “menu” implementa o método “add”, tendo como parâmetros: o grupo, o item, a ordenação e o título. O método “setIcon” define os ícones dos menus. Já com a classe sub-menu não conseguimos adicionar ícones, tendo suas funcionalidades parecidas com as do “Menu”.


@Override
public boolean onOptionsItemSelected(MenuItem item)
{
   switch (item.getItemId())
   {   
    case 1: Mensagem("Cadastros", "The Club - Cadastro!");
    break;
     case 2: Mensagem("Movimentos", "The Club - Movimentos!");
     break;
     case 3: Mensagem("Caixa", "The Club - Caixa!");
     break;
     case 4: Mensagem("Contas a Pagar", "The Club - Contas a Pagar!");
     break;       
     case 5: Mensagem("Contas a Receber", "The Club - Contas a Receber!");
     break;       
    }
    //retornar a classe pai
    return super.onOptionsItemSelected(item);
}

   
//Rotina para exibir mensagem ao usuário
public void Mensagem(String titulo, String texto)
{
AlertDialog.Builder mensagem = new         AlertDialog.Builder(Menu_JavaActivity.this);
   mensagem.setTitle(titulo);
   mensagem.setMessage(texto);
   mensagem.setNeutralButton("OK", null);
   mensagem.show();
}


O método booleano OnOptionsItemSelected() segue a mesma lógica no que foi criado anteriormente, sendo responsável por tratar os itens pela sua identificação “getItemId” chamando as rotinas necessárias ao utilizar os itens de Menu. A única diferença é que possuímos alguns itens a mais.
A classe Builder novamente está presente em nosso exemplo, tendo como papel mostrar uma mensagem informativa ao usuário. O exemplo deverá ficar identico ao da Figura 05. A Figura 06 ilustra a utilização de Sub Menus.

Figura 05: Menu via Programação em Run-Time.


Figura 06: Sub-Menus.

Conclusão

Vimos neste artigo duas formas de criação de menus no Sistema Android. Sendo a primeira utilizando um arquivo XML e a segunda apenas via programação tendo como resultado o mesmo. Reforço o que escrevi no início do artigo, utilizem o site oficial do Android para poder aprender mais sobre esta tecnologia, tendo sua documentação necessária para se desenvolver praticamente tudo.
Um abraço e até o mês que vem!


Nenhum comentário:

Postar um comentário