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代码 复制代码  收藏代码
  1.   @Override  
  2.   public boolean onCreateOptionsMenu(Menu menu) {   
  3.       if (mDesktopLocked && mSavedInstanceState == nullreturn 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.   }  
    @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)
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.   }  
    @Override
    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)
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. }  
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case MENU_ADD:
                addItems();
                return true;
            case MENU_WALLPAPER_SETTINGS:
                startWallpaper();
                return true;
            case MENU_SEARCH:
                onSearchRequested();
                return true;
            case MENU_NOTIFICATIONS:
                //showNotifications();
            	//ADW: temp usage for desktop eiting
            	if(allAppsOpen)closeAllApps(false);
            	startDesktopEdit();
                return true;
            case MENU_ALMOSTNEXUS:
                showCustomConfig();
                return true;
            case MENU_APP_GRP_CONFIG:
				showAppList();
                return true;
            case MENU_APP_GRP_RENAME:
				showNewGrpDialog();
                return true;
            case MENU_APP_SWITCH_GRP:
				showSwitchGrp();
                return true;
            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:是否显示该组
相关文章
|
5天前
|
安全 Android开发 数据安全/隐私保护
Android中的动态权限请求与最佳实践
【4月更文挑战第14天】 在现代安卓应用开发中,用户隐私和安全被赋予了前所未有的重要性。随着Android 6.0(API级别23)引入的运行时权限模型,开发者必须更加细致地处理权限请求,以确保应用功能的完整性同时不侵犯用户的隐私。本文将深入探讨如何在Android应用中实现动态权限请求,分析常见问题,并提供一系列最佳实践,以帮助开发者优雅地处理这一挑战。
16 5
|
8月前
|
Android开发
Android 中选项菜单(Option menu)的用法
Android 中选项菜单(Option menu)的用法
77 0
|
4月前
|
Android开发
[Android]DrawerLayout滑动菜单+NavigationView
[Android]DrawerLayout滑动菜单+NavigationView
27 0
|
4月前
|
XML Java Android开发
Android App手势冲突处理中上下左右滑动的处理以及侧滑边缘菜单的讲解及实战(附源码 可直接使用)
Android App手势冲突处理中上下左右滑动的处理以及侧滑边缘菜单的讲解及实战(附源码 可直接使用)
66 0
|
4月前
|
XML Java Android开发
Android App开发之图像加工中给图像添加水波动态特效(附源码和演示视频 简单易懂)
Android App开发之图像加工中给图像添加水波动态特效(附源码和演示视频 简单易懂)
40 0
|
4月前
|
XML Java Android开发
Android Studio App开发中工具栏Toolbar、溢出菜单OverflowMenu、标签布局TabLayout的讲解及实战(实现京东App的标签导航栏,附源码)
Android Studio App开发中工具栏Toolbar、溢出菜单OverflowMenu、标签布局TabLayout的讲解及实战(实现京东App的标签导航栏,附源码)
58 0
|
8月前
|
Android开发
Android 中实现上下文菜单(Context menu)详解
Android 中实现上下文菜单(Context menu)详解
39 0
|
9月前
|
Android开发 iOS开发 Windows
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
无影ios & Android客户端6.0.0版本发布!移动端触控体验更舒适,用户操作更便捷,一起来看看!
676 0
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
|
9月前
|
XML Android开发 数据格式
Android上机实验-4 菜单和对话框
Android上机实验-4 菜单和对话框
108 1
|
9月前
|
双11 Android开发
Android动态来改变App桌面图标
其实对于这样的一个桌面图标更换,Android中为我们提供了AndroidManifest.xml里的<activity-alias>标签实现方式。
221 0