Trabalhando com Options Menu
Autor: Gustavo Carvalho | Publicado: 2012-07-10T10:35:00-03:00



Fonte:&nbsp;http://www.androidpatterns.com/uap_pattern/options-menu


Options Menu está presente desde as primeiras versões do Android. É amplamente utilizada e é uma funcionalidade já conhecida pelos usuários. Ela é indicada para oferecer opções não muito usadas, que não devem ficar o tempo todo expostas na tela. Assim o usuário sempre sabe que há algumas funcionalidades que não estão na tela mas que ele sabe como acessa-las.




É uma funcionalidade muito simples de implementar. Assim como o layout, você pode definir o menu em tempo de execução, através do código java ou através de um arquivo xml. Se seu menu for em grande parte estático, é uma boa prática defini-lo no xml. Para isso, crie uma pasta em res com nome menu (se já não tiver criado) e adicione um novo arquivo xml,&nbsp;por exemplo, menu.xml:




&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;menu xmlns:android="http://schemas.android.com/apk/res/android" &gt;

    &lt;item
        android:id="@+id/news"
        android:icon="@android:drawable/ic_menu_recent_history"
        android:title="@string/novidades"/&gt;
    &lt;item
        android:id="@+id/sobre"
        android:icon="@android:drawable/ic_menu_info_details"
        android:title="@string/sobre"/&gt;

&lt;/menu&gt;



Nesse menu definimos apenas dois itens, um item de Novidades e outro de Sobre. Note que definimos um id, que será usado no código, um&nbsp;ícone&nbsp;(opcional) e um título. A seguir precisamos dizer para Activity usar esse xml&nbsp;para montar o menu quando o usuário apertar o botão de menu. E isso também é bastante simples. Basta adicionar esse código na classe de sua Activity:


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



O método recebe como&nbsp;parâmetro&nbsp;um Menu que deve ser usado para construir nosso menu. Com esse objeto podemos trabalhar adicionando, removendo ou editando itens do menu usando código java, mas nesse caso apenas carregamos os itens definidos no xml R.menu.menu, que foi&nbsp;construído&nbsp;anteriormente.&nbsp;Devemos retornar true para que o menu seja exibido. Esse método é chamado apenas uma vez, quando o usuário clica pela primeira vez no botão de menu. Se você quer um método que é chamado toda vez que o usuário clica no botão de menu, talvez porque os itens do menu variem a depender do contexto da tela, você deve usar o método onPrepareOptionsMenu, que recebe o mesmo parâmetro e funciona da mesma forma.



Agora seu Options Menu já pode ser exibido, mas ainda não há nenhuma ação associada, ou seja, o menu aparece, o usuário clica, mas nada acontece. Implementar isso também é bastante simples, basta adicionar o seguinte método na sua Activity:




    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        switch(item.getItemId()){
        case R.id.news:
                showDialog(DIALOG_NEWS);
                return true;
        case R.id.sobre:
                showDialog(DIALOG_INFO);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }



Auto explicativo não? Recebe como parâmetro o MenuItem clicado e você deve tomar a ação apropriada. Geralmente se usa o switch&nbsp;decidindo qual rumo tomar a partir do id do item. Nesse caso é exibido um determinado Dialog para cada elemento. É uma boa prática colocar as ações a ser executadas por cada opção em um outro método, assim o onOptionsItemSelected não fica muito grande, sendo responsável apenas por verificar qual opção foi escolhida.



Por hoje é só, coisa bem simples. Qualquer dúvida não hesite em perguntar!