zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    双六
    除法取模
    欧拉函数及费马小定理
    基础模运算
    Leeetcode--581. Shortest Unsorted Continuous Subarray
    Codeforces Round #541--1131F. Asya And Kittens(基础并查集)
    leetcode--200. Number of Islands
    leetcode--21. Merge Two Sorted Lists
    leetcode--155. Min Stack
    Codeforces Round #539--1113B
  • 原文地址:https://www.cnblogs.com/phenixyu/p/3969122.html
Copyright © 2011-2022 走看看