android menu菜单的动态隐藏

先从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代码   收藏代码
  1.   @Override  
  2.   public boolean onCreateOptionsMenu(Menu menu) {  
  3.       if (mDesktopLocked && mSavedInstanceState == null) return false;  
  4.   
  5.       super.onCreateOptionsMenu(menu);  
  6.       menu.add(MENU_GROUP_ADD, MENU_ADD, 0, R.string.menu_add)  
  7.               .setIcon(android.R.drawable.ic_menu_add)  
  8.               .setAlphabeticShortcut('A');  
  9.       menu.add(MENU_GROUP_NORMAL, MENU_WALLPAPER_SETTINGS, 0, R.string.menu_wallpaper)  
  10.                .setIcon(android.R.drawable.ic_menu_gallery)  
  11.                .setAlphabeticShortcut('W');  
  12.       menu.add(MENU_GROUP_NORMAL, MENU_SEARCH, 0, R.string.menu_search)  
  13.               .setIcon(android.R.drawable.ic_search_category_default)  
  14.               .setAlphabeticShortcut(SearchManager.MENU_KEY);  
  15.       menu.add(MENU_GROUP_NORMAL, MENU_NOTIFICATIONS, 0, R.string.menu_edit)  
  16.               .setIcon(android.R.drawable.ic_menu_edit)  
  17.               .setAlphabeticShortcut('E');  
  18.   
  19.       final Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);  
  20.       settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |  
  21.               Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);  
  22.   
  23.       menu.add(MENU_GROUP_NORMAL, MENU_SETTINGS, 0, R.string.menu_settings)  
  24.               .setIcon(android.R.drawable.ic_menu_preferences).setAlphabeticShortcut('P')  
  25.               .setIntent(settings);  
  26. //ADW: add custom settings  
  27.              menu.add(MENU_GROUP_NORMAL, MENU_ALMOSTNEXUS, 0, R.string.menu_adw_settings)  
  28. .setIcon(android.R.drawable.ic_menu_preferences)  
  29. .setAlphabeticShortcut('X');  
  30.   
  31. menu.add(MENU_GROUP_CATALOGUE, MENU_APP_GRP_CONFIG, 0, R.string.AppGroupConfig)  
  32.     .setIcon(android.R.drawable.ic_menu_agenda);  
  33. //menu.add(MENU_GROUP_CATALOGUE, MENU_APP_GRP_RENAME, 0, R.string.AppGroupRename)  
  34. //  .setIcon(R.drawable.ic_menu_notifications);  
  35.         menu.add(MENU_GROUP_CATALOGUE, MENU_APP_SWITCH_GRP, 0, R.string.AppGroupChoose)  
  36.     .setIcon(android.R.drawable.ic_menu_manage);  
  37.         menu.add(MENU_GROUP_CATALOGUE, MENU_APP_DELETE_GRP, 0, R.string.AppGroupDel)  
  38.     .setIcon(android.R.drawable.ic_menu_delete);  
  39.    return true;  
  40.   }  


onPrepareOptionsMenu(Menu menu) 

Java代码   收藏代码
  1.   @Override  
  2.   public boolean onPrepareOptionsMenu(Menu menu) {  
  3.       super.onPrepareOptionsMenu(menu);  
  4.       if(mIsEditMode || mIsWidgetEditMode)return false;  
  5.       // We can't trust the view state here since views we may not be done binding.  
  6.       // Get the vacancy state from the model instead.  
  7. mMenuAddInfo = mWorkspace.findAllVacantCellsFromModel();  
  8. menu.setGroupVisible(MENU_GROUP_ADD, mMenuAddInfo != null && mMenuAddInfo.valid && (!allAppsOpen) );  
  9. menu.setGroupVisible(MENU_GROUP_NORMAL, !allAppsOpen);  
  10. menu.setGroupVisible(MENU_GROUP_CATALOGUE, allAppsOpen);  
  11.   
  12.      return true;  
  13.   }  


onOptionsItemSelected(MenuItem item) 

Java代码   收藏代码
  1. @Override  
  2. public boolean onOptionsItemSelected(MenuItem item) {  
  3.     switch (item.getItemId()) {  
  4.         case MENU_ADD:  
  5.             addItems();  
  6.             return true;  
  7.         case MENU_WALLPAPER_SETTINGS:  
  8.             startWallpaper();  
  9.             return true;  
  10.         case MENU_SEARCH:  
  11.             onSearchRequested();  
  12.             return true;  
  13.         case MENU_NOTIFICATIONS:  
  14.             //showNotifications();  
  15.             //ADW: temp usage for desktop eiting  
  16.             if(allAppsOpen)closeAllApps(false);  
  17.             startDesktopEdit();  
  18.             return true;  
  19.         case MENU_ALMOSTNEXUS:  
  20.             showCustomConfig();  
  21.             return true;  
  22.         case MENU_APP_GRP_CONFIG:  
  23. showAppList();  
  24.             return true;  
  25.         case MENU_APP_GRP_RENAME:  
  26. showNewGrpDialog();  
  27.             return true;  
  28.         case MENU_APP_SWITCH_GRP:  
  29. showSwitchGrp();  
  30.             return true;  
  31.         case MENU_APP_DELETE_GRP:  
  32. showDeleteGrpDialog();  
  33.         return true;  
  34.     }  
  35.   
  36.     return super.onOptionsItemSelected(item);  
  37. }  



解释下一些方法,便于记忆: 
代码中用到的方法用绿色标注,官方解释为红色,我的理解为蓝色。 

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:是否显示该组

 

原文:http://firefox7.iteye.com/blog/829399

转载于:https://www.cnblogs.com/veins/p/3690018.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值