Android Menu

  1. 菜单种类:
    • 选项菜单(Option Menu):点击手机的Menu键才会显示应用关联的菜单
    • 上下文菜单(ContextMenu):当用户一直按住某个组件时,该组件所关联的上下文菜单就显示出来,不支持菜单快捷键和图标
    • 子菜单(SubMenu):包含多个菜单项,点击会显示不支持菜单项图标,不支持嵌套子菜单

  2. 常用菜单命令:
    • MenuItem add(...):添加菜单项
    • SubMenu addSubMenu(...):添加子菜单
    • MenuItem.setCheckable(boolean):设置菜单项是否可选
    • MenuItem.setChecked(boolean):设置菜单项选中状态,之后再打开也可以看到该菜单项是被选中的
    • android 单选或者复选菜单项,必须在onOptionsItemSelected或者onContextItemSelected事件中调用setChecked设置选中状态才能选中菜单项,注意这与RadioButton或者CheckBox逻辑不同,这两者不用调用setChecked也可以选中
    • onCreateOptionsMenu:只会调用一次,他只会在Menu显示之前去调用一次,之后就不会在去调用,只有返回true,menu才会被显示
    • onPrepareOptionsMenu:每次在display Menu之前,都会去调用,只要按一次Menu按鍵,就会调用一次。所以可以在这里动态的改变menu。
    • onMenuOpened:在onPrepareOptionsMenu后调用,如果返回true会显示系统
      @Override
      public boolean onCreateOptionMenu(Menu menu)
      {
      //添加子菜单,点击子菜单会弹出其包含的菜单项
       SubMenu fontMenu==menu.addSubMenu("字体大小")
       fontMenu.setIcon(R.drawable.font)
       fontMenu.setHeaderIcon(R.drawable.font)
       fontMenu.setHeaderTitle("选择字体大小")
       fontMenu.add(0,FONT_10,0,"10号字体")
       fontMenu.add(0,FONT_12,0,"12号字体")
       fontMenu.add(0,FONT_14,0,"14号字体")
      
       //添加菜单项
       menu.add(0,PLAIN_ITEM,0,"普通菜单项")
      }

  3. 选项菜单中的命令通常是作用于App全局,而不是作用于部分用户界面

  4. 需要单击某个菜单项启动其他Activity时只要调用MenuItem.setIntent方法即可将菜单项与制定的Intent关联到一起
  5. 如果希望所创建的菜单项是单选菜单项或多选菜单项,可以使用如下方法:
    • MenuItem.setCheckable(bool checkable)设置菜单项可选
    • Menu.setGroupCheckable(int group,boolean checkable,boolean exclusive):设置菜单组是否可选,上例中SubMenu如果设置了可选相当于将菜单组中的每个菜单项设置了可选,设置了exclusive=true,则它们只可以单选,为false则可以多选

  6. 推荐用xml定义Menu
    // Inflate the menu; this adds items to the action bar if it is present. 
    MenuInflater inflater = getMenuInflater();  
    inflater.inflate(R.menu.options_menu, menu);

  7. 自定义选项菜单的方法:在Activity.onMenuOpened方法中显示一个View,作为点击Menu时的返回,其实是用其他控件替换了系统格式的菜单.如下代码返回一个Gridview作为菜单
      GridView menuGrid;
      menuGrid.setAdapter(simpleAdapter);  
      @Override
        public boolean onMenuOpened(int featureId, Menu menu) {
            if (menuDialog == null) {
                menuDialog = new AlertDialog.Builder(this).setView(menuGrid).show();
            }
            menuDialog.show();
            return false;// 返回为true 则显示系统menu
        }
    下图是按执行效果,按menu键弹出选项菜单:
     image
原文地址:https://www.cnblogs.com/phenixyu/p/3969122.html