- 菜单种类:
- 选项菜单(Option Menu):点击手机的Menu键才会显示应用关联的菜单
- 上下文菜单(ContextMenu):当用户一直按住某个组件时,该组件所关联的上下文菜单就显示出来,不支持菜单快捷键和图标
- 子菜单(SubMenu):包含多个菜单项,点击会显示,不支持菜单项图标,不支持嵌套子菜单
- 常用菜单命令:
- 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,"普通菜单项") }
-
选项菜单中的命令通常是作用于App全局,而不是作用于部分用户界面
- 需要单击某个菜单项启动其他Activity时只要调用MenuItem.setIntent方法即可将菜单项与制定的Intent关联到一起
- 如果希望所创建的菜单项是单选菜单项或多选菜单项,可以使用如下方法:
- MenuItem.setCheckable(bool checkable)设置菜单项可选
- Menu.setGroupCheckable(int group,boolean checkable,boolean exclusive):设置菜单组是否可选,上例中SubMenu如果设置了可选相当于将菜单组中的每个菜单项设置了可选,设置了exclusive=true,则它们只可以单选,为false则可以多选
- 推荐用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);
- 自定义选项菜单的方法:在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 }
转载于:https://www.cnblogs.com/phenixyu/p/3969122.html