(一)选项菜单
1、简单的创建菜单:
1 @Override
2 public boolean onCreateOptionsMenu(Menu menu) {
3 super.onCreateOptionsMenu(menu);
4
5 // 添加菜单
6 menu.add("菜单选项1");
7 /*
8 * pram1:组号 pram2:唯一的ID号 pram3:排序号 pram4:标题
9 */
10 menu.add(1, Menu.FIRST, Menu.FIRST, "菜单选项2");
11
12 // 希望显示菜单就返回true
13 return true;
14 }
2、菜单的分组以及简单属性:
1 @Override
2 public boolean onCreateOptionsMenu(Menu menu) {
3 super.onCreateOptionsMenu(menu);
4
5 int group1 = 1;
6 int group2 = 2;
7 menu.add(group1, 1, 1, "item1");
8 menu.add(group1, 2, 2, "item2");
9 menu.add(group2, 3, 3, "item3");
10 menu.add(group2, 4, 4, "item4");
11
12 // menu.removeGroup(group1);//删除一个组
13 // menu.setGroupVisible(group1, false);//设置可见性
14 // menu.setGroupEnabled(group2, false);//设置是否可点
15 // menu.setGroupCheckable(group2, true, t);//设置一组菜单的勾选情况
16 return true;
17 }
3、响应菜单
一、通过onOptionsItemSelected方法
1 @Override
2 public boolean onOptionsItemSelected(MenuItem item) {
3 // 响应每个菜单项(通过菜单项的ID)
4 switch (item.getItemId()) {
5 case 1:
6 // do something here
7 break;
8 case 2:
9 // do something here
10 break;
11 case 3:
12 // do something here
13 break;
14 case 4:
15 Toast.makeText(this, "hello", 0).show();
16 break;
17 default:
18 // 对没有处理的事件,交给父类来处理
19 return super.onOptionsItemSelected(item);
20 }
21 //返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
22 return true;
23 }
二、通过监听
1 //第一步:创建监听器类
2 class MyMenuItemClickListener implements OnMenuItemClickListener {
3 @Override
4 publicboolean onMenuItemClick(MenuItem item) {
5 // do something here...
6 return true; //finish handling
7 }
8 }
9 //第二步:为菜单项注册监听器
10 menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());
三、通过Intent
(二)子菜单subMenu
注意:Menu可以包含多个SubMenu及menuItem,SubMenu可以包含多个MenuItem,,但是SubMenu不能包含SubMenu。
1 @Override
2 public boolean onCreateOptionsMenu(Menu menu) {
3 //一个menu中可以添加多个子菜单
4 SubMenu subMenu=menu.addSubMenu(1,1, 0, "子菜单");
5
6 //在子菜单中添加多个菜单选项
7 MenuItem menuItem1=subMenu.add(1, 1, 0, "菜单选项1");
8 subMenu.add(1, 2, 1,"菜单选项2");
9 subMenu.add(1, 3, 2,"菜单选项3");
10 subMenu.add(1, 4, 3,"菜单选项4");
11
12 //子菜单不支持显示图标,尽管这样设置不会报错
13 subMenu.setIcon(R.drawable.ic_launcher);
14
15 //设置菜单选项的图标
16 menuItem1.setIcon(R.drawable.ic_launcher);
17 return true;
18 }
(三)上下文菜单ContextMenu
1 package com.zzw.contextMenu;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.util.Log;
6 import android.view.ContextMenu;
7 import android.view.ContextMenu.ContextMenuInfo;
8 import android.view.MenuItem;
9 import android.view.View;
10 import android.widget.ArrayAdapter;
11 import android.widget.ListView;
12 import android.widget.Toast;
13
14 public class MainActivity extends Activity {
15 private static final String TAG = "MainActivity";
16 ListView listView;
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 Log.d(TAG, "onCreate");
21
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.activity_main);
24 listView = (ListView) findViewById(R.id.listView);
25
26 simpleShowList();
27 //1.在activity的onCreate方法中为一个view注册上下文菜单
28 this.registerForContextMenu(listView);
29
30 }
31
32 //2.在onCreateContextMenu中生成上下文菜单。
33 @Override
34 public void onCreateContextMenu(ContextMenu menu, View v,
35 ContextMenuInfo menuInfo) {
36 Log.d(TAG, "onCreateContextMenu_start");
37
38 menu.setHeaderTitle("上下文菜单标题");
39 menu.add(0, 1, 0, "选项1");
40 menu.add(0, 2, 0, "选项2");
41 menu.add(0, 3, 0, "选项3");
42
43 Log.d(TAG, "onCreateContextMenu_stop");
44 }
45
46 //3.在onContextItemSelected中响应上下文菜单项。
47 @Override
48 public boolean onContextItemSelected(MenuItem item) {
49 Log.d(TAG, "onContextItemSelected_start");
50 int item_id = item.getItemId();
51 switch (item_id) {
52 case 1:
53 Toast.makeText(this, "我是上下文菜单选项1", 0).show();
54 break;
55 case 2:
56
57 break;
58 case 3:
59
60 break;
61
62 default:
63 return super.onContextItemSelected(item);
64 }
65 Log.d(TAG, "onContextItemSelected_stop");
66 return true;
67 }
68
69 private void simpleShowList() {
70 Log.d(TAG, "simpleShowList_start");
71 String[] showList = { "显示1", "显示2", "显示3", "显示4" };
72
73 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
74 android.R.layout.simple_expandable_list_item_1, showList);
75
76 listView.setAdapter(adapter);
77 Log.d(TAG, "simpleShowList_stop");
78 }
79
80 }
(四)通过XML文件添加菜单
1.在res文件下创建menu文件夹,一般默认有的,在里面new出一个Android xml File来编辑自己的菜单
2.编辑自己的xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
3
4 <!-- group是分组 -->
5 <group android:id="@+id/group1" >
6
7 <!-- item是一个菜单选项 -->
8 <item
9 android:id="@+id/item1"
10 android:title="菜单选项1(子菜单)">
11 <!-- 在一个item中添加一个menu就是子菜单 -->
12 <menu>
13 <!-- 子菜单中的菜单选项 -->
14 <item
15 android:icon="@drawable/ic_launcher"
16 android:id="@+id/item1_1"
17 android:title="子菜单内选项1"/>
18 <item
19 android:id="@+id/item1_2"
20 android:title="子菜单内选项2"/>
21 </menu>
22 </item>
23 <item
24 android:id="@+id/item2"
25 android:title="菜单选项2">
26 </item>
27 </group>
28 <group android:id="@+id/group2" >
29 <item
30 android:id="@+id/item3"
31 android:title="菜单选项4">
32 </item>
33 <item
34 android:id="@+id/item4"
35 android:title="菜单选项5">
36 </item>
37 </group>
38
39 </menu>
3.在activity中获取:
1 @Override
2 public boolean onCreateOptionsMenu(Menu menu) {
3 MenuInflater in = getMenuInflater();
4 in.inflate(R.menu.main, menu);
5 return true;
6 }
7
8 @Override
9 public boolean onOptionsItemSelected(MenuItem item) {
10 switch (item.getItemId()) {
11 case R.id.item1:
12 13 break;
14 case R.id.item2:
15
16 break;
17
18 default:
19 return super.onOptionsItemSelected(item);
20 }
21
22 return true;
23 }
一些基本的属性:
设置菜单icon
1 <item
2 android:id="@+id/item1"
3 android:title="菜单选项1"
4 android:icon="@drawable/ic_launcher"
5 />
设置菜单选项的可选,android:checkableBehavior,chencked
1 <!-- checkableBehavior设置可选 -->
2 <group android:id="@+id/group1"
3 android:checkableBehavior="all" >
4 <!-- checked设置特定菜单项(被勾中) -->
5 <item
6 android:id="@+id/item1"
7 android:title="菜单选项1"
8 >
9 </item>
10 <item
11 android:id="@+id/item2"
12 android:checked="true"
13 android:title="菜单选项2">
14 </item>
15 </group>
设置菜单可用不可用android:enable
1 <group android:id="@+id/group1">
2 <item
3 android:id="@+id/item1"
4 android:title="菜单选项1"
5 android:enabled="true"
6 >
7 </item>
8 <item
9 android:id="@+id/item2"
10 android:title="菜单选项2"
11 android:enabled="false">
12 </item>
13 </group>
设置菜单选项是否可见android:visible
1 <group android:id="@+id/group1">
2 <item
3 android:id="@+id/item1"
4 android:title="菜单选项1"
5 android:visible="true"
6 >
7 </item>
8 <item
9 android:id="@+id/item2"
10 android:title="菜单选项2"
11 android:visible="false">
12 </item>
13 </group>
14