天天看點

android menu菜單的動态隐藏

 今天開始研究adw的launcher了,加油加油···

先從adw主界面按menu按鍵開始,涉及以下3個方法:

1、oncreateoptionsmenu(menu menu)

2、onprepareoptionsmenu(menu menu)

3、onoptionsitemselected(menuitem item)

分别解釋一下:

方法名

觸發時間

如何更新

oncreateoptionsmenu

進入launcher後第一次點menu按鈕時觸發

1、切換語言,android在選擇不同的語言之後會調用iactivitymanager的執行個體updateconfiguration。2、kill掉adw的launcher也行。

onprepareoptionsmenu

有兩種情況:1、進入launcher後第一次點menu按鈕觸發oncreateoptionsmenu後調用;2、經過第一步,以後每次點menu按鈕時都會觸發

點選menu觸發

onoptionsitemselected

選擇menu裡面的任意内容後觸發

點選nemu裡的任意選項

三段代碼如下:

oncreateoptionsmenu(menu menu)

java代碼

android menu菜單的動态隐藏
android menu菜單的動态隐藏
android menu菜單的動态隐藏

  @override  

  public boolean oncreateoptionsmenu(menu menu) {   

      if (mdesktoplocked && msavedinstancestate == null) return false;   

      super.oncreateoptionsmenu(menu);   

      menu.add(menu_group_add, menu_add, 0, r.string.menu_add)   

              .seticon(android.r.drawable.ic_menu_add)   

              .setalphabeticshortcut('a');   

      menu.add(menu_group_normal, menu_wallpaper_settings, 0, r.string.menu_wallpaper)   

               .seticon(android.r.drawable.ic_menu_gallery)   

               .setalphabeticshortcut('w');   

      menu.add(menu_group_normal, menu_search, 0, r.string.menu_search)   

              .seticon(android.r.drawable.ic_search_category_default)   

              .setalphabeticshortcut(searchmanager.menu_key);   

      menu.add(menu_group_normal, menu_notifications, 0, r.string.menu_edit)   

              .seticon(android.r.drawable.ic_menu_edit)   

              .setalphabeticshortcut('e');   

      final intent settings = new intent(android.provider.settings.action_settings);   

      settings.setflags(intent.flag_activity_new_task |   

              intent.flag_activity_reset_task_if_needed);   

      menu.add(menu_group_normal, menu_settings, 0, r.string.menu_settings)   

              .seticon(android.r.drawable.ic_menu_preferences).setalphabeticshortcut('p')   

              .setintent(settings);   

//adw: add custom settings   

             menu.add(menu_group_normal, menu_almostnexus, 0, r.string.menu_adw_settings)   

.seticon(android.r.drawable.ic_menu_preferences)   

.setalphabeticshortcut('x');   

menu.add(menu_group_catalogue, menu_app_grp_config, 0, r.string.appgroupconfig)   

    .seticon(android.r.drawable.ic_menu_agenda);   

//menu.add(menu_group_catalogue, menu_app_grp_rename, 0, r.string.appgrouprename)

//  .seticon(r.drawable.ic_menu_notifications);

        menu.add(menu_group_catalogue, menu_app_switch_grp, 0, r.string.appgroupchoose)   

    .seticon(android.r.drawable.ic_menu_manage);   

        menu.add(menu_group_catalogue, menu_app_delete_grp, 0, r.string.appgroupdel)   

    .seticon(android.r.drawable.ic_menu_delete);   

   return true;   

  }  

onprepareoptionsmenu(menu menu)

android menu菜單的動态隐藏
android menu菜單的動态隐藏
android menu菜單的動态隐藏

  public boolean onprepareoptionsmenu(menu menu) {   

      super.onprepareoptionsmenu(menu);   

      if(miseditmode || miswidgeteditmode)return false;   

      // we can't trust the view state here since views we may not be done binding.

      // get the vacancy state from the model instead.

mmenuaddinfo = mworkspace.findallvacantcellsfrommodel();   

menu.setgroupvisible(menu_group_add, mmenuaddinfo != null && mmenuaddinfo.valid && (!allappsopen) );   

menu.setgroupvisible(menu_group_normal, !allappsopen);   

menu.setgroupvisible(menu_group_catalogue, allappsopen);   

     return true;   

onoptionsitemselected(menuitem item)

android menu菜單的動态隐藏
android menu菜單的動态隐藏
android menu菜單的動态隐藏

@override  

public boolean onoptionsitemselected(menuitem item) {   

    switch (item.getitemid()) {   

        case menu_add:   

            additems();   

            return true;   

        case menu_wallpaper_settings:   

            startwallpaper();   

        case menu_search:   

            onsearchrequested();   

        case menu_notifications:   

            //shownotifications();

            //adw: temp usage for desktop eiting

            if(allappsopen)closeallapps(false);   

            startdesktopedit();   

        case menu_almostnexus:   

            showcustomconfig();   

        case menu_app_grp_config:   

showapplist();   

        case menu_app_grp_rename:   

shownewgrpdialog();   

        case menu_app_switch_grp:   

showswitchgrp();   

        case menu_app_delete_grp:   

showdeletegrpdialog();   

        return true;   

    }   

    return super.onoptionsitemselected(item);   

}  

解釋下一些方法,便于記憶:

代碼中用到的方法用綠色标注,官方解釋為紅色,我的了解為藍色。

menu.add(menu_group_add, menu_add, 0, r.string.menu_add)

                .seticon(android.r.drawable.ic_menu_add)

                .setalphabeticshortcut('a');

menuitem android.view.menu.add(int groupid, int itemid, int order, int titleres)

variation on add(int, int, int, charsequence) that takes a string resource identifier instead of the string itself.

參數:

groupid the group identifier that this item should be part of. this can also be used to define groups of items for batch state changes. normally use none if an item should not be in a group.

itemid unique item id. use none if you do not need a unique id.

order the order for the item. use none if you do not care about the order. see menuitem.getorder().

titleres resource identifier of title string.

傳回:

the newly added menu item.

groupid:分組id

itemid:各項自己的uid

order:我了解為目錄,還沒具體看

titleres:顯示文本資訊

seticon方法:設定文字上方的圖示

setalphabeticshortcut方法:在menu菜單下的快捷鍵,不是全鍵盤的機子幾乎不會用到的。

menu.setgroupvisible(menu_group_add, mmenuaddinfo != null && mmenuaddinfo.valid && (!allappsopen) );

void android.view.menu.setgroupvisible(int group, boolean visible)

show or hide all menu items that are in the given group.

group the group of items to operate on.

visible if true the items are visible, else they are hidden.

另請參閱:

menuitem.setvisible

設定各個groupid組是夠顯示的方法

group:其實就是android.view.menu.add裡面的groupid

visible:是否顯示該組

繼續閱讀