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