Menu : 意之菜单。

在Android开发中,有三种菜单:

  1. OptionsMeun:  选项菜单
  2. ContextMenu: 上下文菜单
  3. SubMenu: 子菜单

OptionsMenu: 

按住Android手机的Menu键,就会显示OptonsMenu,它有以下要点:

  1. "By default, every Activity supports an options menu of actions or options. You can add items to this menu and handle clicks on your additions." ,详情请见:http://developer.android.com/reference/android/view/Menu.html
  2. 最多只显示6个菜单项,如果超过6个,它会以“More”形式来调出;
  3. 支持Title与Icon,可以设置快捷键。
  4. 方法:
    1. Activity: onCreateOptionsMenu(Menu menu) : 创建option menu,方法需要传入Menu 接口
    2. Activity:   onOptionsItemSelected(MenuItem item): 菜单项目被选择事件,方法需要传入MenuItem接口
    3. Activity:   onOptionsMenuClosed(Menu menu): 当菜单被关闭后,调用;
    4. Activity:   onPrepareOptionsMenu(Menu menu): 菜单显示之前调用;如果要动态显示菜单,可以写在此方法中。
  5. 代码:
 1 @Override
 2     public boolean onCreateOptionsMenu(Menu menu) {
 3         /**
 4          * 1. 如果不分组,就自定义为Menu.NONE 2. id: 这个很重要:onOptionsItemSelected(MenuItem
 5          * item) 根据id来判断那个菜单被选中 3. 定义菜单的排列 3. 设置Title
 6          */
 7         menu.add(Menu.NONE, 1, Menu.NONE, "Dialog");
 8         menu.add(Menu.NONE, 2, Menu.NONE, "Toast");
 9         menu.add(Menu.NONE, 3, Menu.NONE, "Dialog With List");
10         menu.add(Menu.NONE, 4, Menu.NONE, "ViewGroup");
11         menu.add(Menu.NONE, 5, Menu.NONE, "test2").setTitle("test");
12         menu.add(Menu.NONE, 6, Menu.NONE, "test3").setIcon(
13                 R.drawable.gallery_05);
14 
15         return super.onCreateOptionsMenu(menu);
16     }
17 
18     @Override
19     public boolean onOptionsItemSelected(MenuItem item) {
20         switch (item.getItemId()) {
21         case 1:
22             createDialog();
23             break;
24 
25         case 2:
26             Toast.makeText(MainActivity.this, "Hello World", Toast.LENGTH_SHORT)
27                     .show();
28             break;
29 
30         case 3:
31             createDialogWithList();
32             break;
33 
34         case 4:
35             startActivity(ViewGroupActivity.class);
36 
37         default:
38             break;
39         }
40 
41         return super.onOptionsItemSelected(item);
42     }
43 
44     @Override
45     public void onOptionsMenuClosed(Menu menu) {
46         Toast.makeText(this, "OptionsMenu closed", Toast.LENGTH_SHORT).show();
47     }
48 
49     @Override
50     public boolean onPrepareOptionsMenu(Menu menu) {
51         Toast.makeText(this, "Prepare to show menu", Toast.LENGTH_SHORT).show();
52         return true;
53     }
View Code

 ContextMenu:

  1. 要绑定一个View,任何View都可以,EG:Button,ListView; 并且要执行Long Click动作.
  2. 不支持快捷键之item icon.
  3. Activity: onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo):创建ContextMenu
  4. Activity: onContextItemSelected(MenuItem item): 处理选中的菜单
  5. Activity: registerForContextMenu(View view) : 通常在onCreate中调用
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 3     <item
 4         android:id="@+id/item1"
 5         android:checkable="true"
 6         android:checked="false"
 7         android:title="item1"/>
 8     <item
 9         android:id="@+id/item2"
10         android:title="item2"/>
11     <item
12         android:id="@+id/item3"
13         android:title="sub menu">
14         <menu>
15             <item
16                 android:id="@+id/sub1"
17                 android:title="sub1"/>
18         </menu>
19     </item>
20 </menu>
View Code
 1 @Override
 2     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
 3         super.onCreateContextMenu(menu, v, menuInfo);
 4         menu.setHeaderTitle("context menu test");
 5         menu.setHeaderIcon(android.R.drawable.ic_menu_share);
 6         getMenuInflater().inflate(R.menu.test_menu, menu);
 7     }
 8     @Override
 9     public boolean onContextItemSelected(MenuItem item){
10         switch (item.getItemId()) {
11         case R.id.item1:
12             item.setChecked(true);
13             break;
14         case R.id.item2:
15         default:
16             break;
17         }
18         return super.onContextItemSelected(item);
19     }
View Code

 为方便大家自定义,这里没有提供onCreate方法,如果要实现ContextMenu效果需要在onCreate方法中调用: registerForContextMenu(View)方法;

Sub menu

  比较简单:http://developer.android.com/reference/android/view/SubMenu.html 

  但是需要注意Sub menu不能添加子菜单,它Options menu及Context menu是可以添加之菜单的;由此可见在Android中菜单的深度只有二层。

posted on 2013-05-21 15:29  idylan  阅读(257)  评论(1编辑  收藏  举报