开发者社区> 一叶飘舟> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android侧滑菜单完整详细示例(改进版)
MainActivity如下:package cc.cd; import android.os.Bundle; import android.view.
922 0
Android侧滑菜单完整详细示例(基础版)
MainActivity如下:package cc.cd; import android.os.AsyncTask; import android.
942 0
Android侧滑菜单完整详细示例(精装版)
MainActivity如下:package cn.patience7; import android.os.AsyncTask; import android.
1087 0
【Android开发】 ListView使用实战详解,你get到了嘛?
【Android开发】 ListView使用实战详解,你get到了嘛?
55 0
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
88 0
Android开发之ListView使用经验分享
在Android开发中,ListView是使用最广泛的组件之一,虽然谷歌推出了RecycleView,但是很多项目中依旧在使用ListView,本文将总结一下使用过程中遇到的一些问题,与大家共勉~~~ 一、ListView 与 Adapter List...
760 0
Android开发重要参考资料
=======================博客============================= 秋百万 有心课堂 郭霖 源码 安装ffmpeg 胡凯 官方培训课程 litesuitsway 爱哥 trinea robinRobin Hu...
828 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载