Hoje vamos aprender como criar um Menu manualmente, como todos devem saber é de grande importância em qualquer aplicativo se ter um menu com as opções que forem necessárias ao aplicativo.
Para isso devemos implementar dois métodos que já são nativos a qualquer Activity.
Abaixo segue o fonte necessário para criar um menu.
Arquivo main.xml, layout da única tela apresentada nesse projeto:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Escola de Android - criando menu"/>
</LinearLayout>
Arquivo main.java:
package br.com.EscolaDeAndroid.Menu;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;
public class main extends Activity {
//definição das constantes utilizadas na criação do menu
private static final int ARQUIVO = 0;
private static final int EDITAR = 1;
private static final int FORMATAR = 2;
private static final int ARQ_NOVO = 3;
private static final int ARQ_SALVAR = 4;
private static final int EDITAR_RECORTAR = 5;
private static final int EDITAR_COPIAR = 6;
private static final int FORMATAR_FONTE = 7;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
//o método abaixo é disparado quando o usuário
//clicar no botão "Menu" do aparelho
@Override
public boolean onCreateOptionsMenu(Menu menu) {
try
{
//cria o menu e submenus
SubMenu menuArquivo = menu.addSubMenu(ARQUIVO, 0, 0, "Arquivo");
SubMenu menuEditar = menu.addSubMenu(EDITAR, 1, 0, "Editar");
MenuItem menuFormatar = menu.add(FORMATAR, FORMATAR_FONTE, 0, "Formatar");
//define uma tecla de atalho para o menu, nesse caso a
//tecla de atalho é a letra "F"
menuFormatar.setShortcut('0', 'F');
//adiciona um ícone ao menu
//menuFormatar.setIcon(R.drawable.icon);
menuFormatar.setIcon(android.R.drawable.ic_menu_edit);
//caso seja necessário desabilitar o menu Arquivo
//abaixo segue exemplo
//menu.findItem(ARQUIVO).setEnabled(false);
menuArquivo.add(ARQUIVO, ARQ_NOVO, 0, "Novo");
menuArquivo.add(ARQUIVO, ARQ_SALVAR, 1, "Salvar");
menuArquivo.setIcon(android.R.drawable.ic_menu_more);
//caso seja necessário desabilitar um subitem do menu Arquivo
//abaixo segue exemplo
//menuArquivo.findItem(ARQ_NOVO).setEnabled(false);
menuEditar.add(EDITAR, EDITAR_RECORTAR, 0, "Recortar");
menuEditar.add(EDITAR, EDITAR_COPIAR, 1, "Copiar");
//caso seja necessário desabilitar um subitem do menu Editar
//abaixo segue exemplo
//menuEditar.findItem(EDITAR_COPIAR).setEnabled(false);
}
catch (Exception e) {
trace("Erro : " + e.getMessage());
}
return super.onCreateOptionsMenu(menu);
}
//o método abaixo é disparado quando o usuário clicar
//em algum dos itens do menu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//de acordo com o item selecionado você executará
//a função desejada
switch (item.getItemId()) {
case ARQ_NOVO:
trace("Você selecionou o menu Novo");
break;
case ARQ_SALVAR:
trace("Você selecionou o menu Salvar");
break;
case EDITAR_COPIAR:
trace("Você selecionou o menu Copiar");
break;
case EDITAR_RECORTAR:
trace("Você selecionou o menu Recortar");
break;
case FORMATAR_FONTE:
trace("Você selecionou o menu Formatar");
break;
}
return true;
}
private void trace (String msg)
{
Toast.makeText (getApplicationContext(), msg, Toast.LENGTH_SHORT).show ();
}
}
Neste exemplo utilizado temos as seguintes opções:
1. menu simples
2. menu com submenu
3. habilitar e desabilitar itens do menu
4. inserir imagens
5. parametrizar tecla de atalho
Como resultado temos as imagens abaixo:
Clicando no botão Menu de seu aparelho será apresentado o Menu raiz, se clicar no item "Arquivo", será exibido um submenu com as opções "Novo" e "Salvar", se clicar na opção "Novo", será exibido a mensagem que você clicou no Menu "Novo".

Espero que seja útil para você este tutorial.
Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.
Desenv com qualidade!



9 comentários:
Cara show, seu blog me ajudou na publicação do meu primeiro jogo: http://goo.gl/PfAEF
Abs
Blog muito bom! Continue postando!
Valeu Galera !!!
Fico feliz por gostarem e estar sendo útil como no caso do Letonai.
Até mais...
Muito legal o post, mais estou com uma dúvida e se poderia me ajudar:
- Tenho várias telas, exemplo: Cadastro de carro, modelo, etc.
E em cada tela eu gostaria de colocar determinado menu.
Como posso fazer?
grato.
At.
Adriano,
Primeiramente obrigado pela leitura e pelo comentário.
Sobre sua dúvida, você pelo visto deve ter vários arquivos .java, por exemplo, caro.java, modelo,java e etc nesse caso em cada um desses arquivo você cria as rotina onCreateOptionsMenu e onOptionsItemSelected e insere os menus que você precisar.
Qualquer dúvida é só avisar.
Bacana seu blog. Poderia me ajudar? Quando o usuario clicar em um item do menu de opções, quero ir para a tela de inserção de dados do veiculo. Não quero isso por meio de um botão na tela, mas por meio do menu nao consigo chamar a tela. Como faço? Obrigado!
Marcelo,
No post: http://escoladeandroid.blogspot.com.br/2012/02/android-criando-uma-agenda-de-contatos.html
é abordado esse assunto.
Obrigado pela visita!
Parabens, seu blog é muito util para muitas pessoas. E eu estou aprendendo muito com ele, você publica coisas muito uteis.
Post mais coisas sempre que puder. E novamente parabéns!
Só tenho um pedido, ensine a gente a mexer com o ACELEROMETRO.
Qual a versão de android para desenvolver esse menu ?
Postar um comentário