Android中菜单是开发者经常需要使用的。Android中的菜单分为如下几种:选项菜单(Option Menu)、上下文菜单(Context Menu)、子菜单(Sub Menu)。
一、选项菜单
当用户按下设备上的菜单键后,弹出的菜单就是选项菜单。选项菜单最多只有六个,超过六个第六个就会显示更多。
选项菜单的创建流程及需要重载的函数如下:
第一次创建菜单时调用如下方法,只会调用一次:
@Override public boolean onCreateOptionsMenu(Menu menu){ //创建菜单 menu.add(Menu.NONE, Menu.FIRST + 1, 1, "菜单1"); menu.add(Menu.NONE, Menu.FIRST + 2, 2, "菜单2"); return true; }
此外,还可以使用setIcon()方法为菜单项设置图标。
每次显示菜单时,都需要调用如下方法:
@Override public boolean onPrepareOptionsMenu(Menu menu){ //选项菜单创建之前(onCreateOptionsMenu()方法)之前调用 return true; }
可以在上面的方法中动态的改变menu。
另外还有以下方法:
@Override public boolean onOptionsItemSelected(MenuItem menuItem){ switch (menuItem.getItemId()) { case Menu.FIRST+1://收藏 break; case Menu.FIRST+2://预约 break; default: break; } return super.onContextItemSelected(menuItem); }
上述的方法可以为菜单项注册点击事件。
@Override public void onOptionsMenuClosed(Menu menu){ //关闭选项菜单时调用 }
上述方法在选项菜单关闭时调用。
二、上下文菜单
当用户长按View界面时,弹出的菜单称之为上下文菜单。
1、调用public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo)方法创建上下文菜单。同选项菜单一样,在其中调用Menu的add方法添加菜单项。
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){ //创建上下文菜单 }
2、重载public boolean onContextItemSelected(MenuItem menuItem)方法注册菜单项的点击事件。
public boolean onContextItemSelected(MenuItem menuItem){ //为上下文菜单菜单项注册事件 }
3、public void onContextMenuClosed()方法在上下文菜单被关闭时调用。
public void onContextMenuClosed(Menu menu){ //上下文菜单关闭时被调用 }
4、调用registerForContextMenu(View view)方法为视图注册上下文菜单。
registerForContextMenu(View view);//为一个view注册上下文菜单
三、子菜单
子菜单就是将相同功能的分组进行多级显示。
@override public boolean onCreateOptionsMenu(Menu menu) { //调用Menu的addSubMenu()方法来添加子菜单 SubMenu menu1 = menu.addSubMenu("菜单1"); SubMenu menu2 = menu.addSubMenu("菜单2"); //添加子菜单 menu1.add(0, Menu.FIRST+1, 0, "子菜单1"); menu1.add(0, Menu.FIRST+2, 0, "子菜单2"); return true; } @override public boolean onOptionsItemSelected(MenuItem item) { //重写onContextItemSelected()方法,响应子菜单的点击事件 switch(item.getItemId()){ case Menu.FIRST+1: break; case Menu.FIRST+2: break; default: break; } return super.onContextItemSelected(menuItem); }