Android中菜单是开发者经常需要使用的。Android中的菜单分为如下几种:选项菜单(Option Menu)、上下文菜单(Context Menu)、子菜单(Sub Menu)。 一、选项菜单
当用户按下设备上的菜单键后,弹出的菜单就是选项菜单。选项菜单最多只有六个,超过六个第六个就会显示更多。
选项菜单的创建流程及需要重载的函数如下:
第一次创建菜单时调用如下方法,只会调用一次:
1 2 3 4 5 6 7
| @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()方法为菜单项设置图标。
每次显示菜单时,都需要调用如下方法:
1 2 3 4 5
| @Override public boolean onPrepareOptionsMenu(Menu menu){ return true; }
|
可以在上面的方法中动态的改变menu。
另外还有以下方法:
1 2 3 4 5 6 7 8 9 10 11 12
| @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); }
|
上述的方法可以为菜单项注册点击事件。
1 2 3 4
| @Override public void onOptionsMenuClosed(Menu menu){ }
|
上述方法在选项菜单关闭时调用。
二、上下文菜单
当用户长按View界面时,弹出的菜单称之为上下文菜单。
1、调用public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo)方法创建上下文菜单。同选项菜单一样,在其中调用Menu的add方法添加菜单项。
1 2 3
| public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){ }
|
2、重载public boolean onContextItemSelected(MenuItem menuItem)方法注册菜单项的点击事件。
1 2 3
| public boolean onContextItemSelected(MenuItem menuItem){ }
|
3、public void onContextMenuClosed()方法在上下文菜单被关闭时调用。
1 2 3
| public void onContextMenuClosed(Menu menu){ }
|
4、调用registerForContextMenu(View view)方法为视图注册上下文菜单。
1
| registerForContextMenu(View view);
|
三、子菜单
子菜单就是将相同功能的分组进行多级显示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @override public boolean onCreateOptionsMenu(Menu menu) { 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) { switch(item.getItemId()){ case Menu.FIRST+1: break; case Menu.FIRST+2: break; default: break; } return super.onContextItemSelected(menuItem); }
|
原文发表于2014-08-15 17:28 原文链接:http://my.oschina.net/whilu/blog/301627