菜单Menu大致分为三种类型:选项菜单(OptionsMenu),上下文菜单(ContextMenu),子菜单(SubMenu)。
1、选项菜单
在一个Activity界面中点击手机Menu键,在屏幕下方弹出的菜单就叫选项菜单(OptionsMenu)。
创建一个选项菜单的步骤:
(1)、覆写Activity的onCreateOptionsMenu(Menu menu)函数。
(2)、调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标。
a、add()方法参数的介绍
看一看menu.add方法的参数:
第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。
第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。
第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
第四个String类型的title参数,表示选项中显示的文字。
(3)、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应事件。
案例代码:
1 package com.example.menu;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.Menu;
6 import android.view.MenuItem;
7 import android.widget.Toast;
8 import android.app.AlertDialog;
9 import android.content.DialogInterface;
10
11 public class MainActivity extends Activity {
12
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17 }
18
19 /*
20 * (non-Javadoc)
21 *
22 * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
23 * 创建一个选项菜单的步骤: 1、覆写Activity的onCreateOptionsMenu(Menu menu)函数
24 * 2、调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标
25 * 3、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应事件
26 */
27 //onCreateOptionsMenu()此方法只会调用一次,即第一次显示的时候会调用.
28 public boolean onCreateOptionsMenu(Menu menu)// 需要重写的函数
29 {
30 menu.add(0, 0, 0, "关于");
31 menu.add(0, 1, 0, "离开");
32
33 return super.onCreateOptionsMenu(menu);
34 }
35 //如果需要更新菜单项.可以在onPrepareOptionsMenu()方法中操作.
36 public boolean onPrepareOptionMenu(Menu menu)
37 {
38 Toast.makeText(this, "菜单显示器前执行的方法", Toast.LENGTH_SHORT).show();
39 return super.onPrepareOptionsMenu(menu);
40
41 }
42 public boolean onOptionsItemSelected(MenuItem item)// 点击后响应的事件
43 {
44 super.onOptionsItemSelected(item);
45 switch (item.getItemId()) {
46 case 0:
47 openOptionsDialog();
48 break;
49 case 1:
50 exitopenOptionsDialog();
51 break;
52 }
53 return super.onOptionsItemSelected(item);
54
55 }
56
57 private void openOptionsDialog() {
58 new AlertDialog.Builder(this).setTitle("关于").setMessage("手机的配置信息")
59 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
60
61 @Override
62 public void onClick(DialogInterface arg0, int arg1) {
63 // TODO Auto-generated method stub
64
65 }
66 }).show();
67 }
68
69 private void exitopenOptionsDialog() {
70 new AlertDialog.Builder(this).setTitle("离开").setMessage("是否离开?")
71 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
72
73 @Override
74 public void onClick(DialogInterface arg0, int arg1) {
75 // TODO Auto-generated method stub
76 finish();
77 }
78 })
79 .setNegativeButton("取消", new DialogInterface.OnClickListener() {
80
81 @Override
82 public void onClick(DialogInterface arg0, int arg1) {
83 // TODO Auto-generated method stub
84 arg0.dismiss();
85 }
86 }).show();
87 }
88 }
2、上下文菜单
Android 的上下文菜单类似于Windows上的右键菜单。当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。任何视图都可以注册上下文菜单,不过,最常见的是用于列表视图ListView的item。
创建上下文菜单步骤:
1、 覆写 Activity 的 onCreateContextMenu() 方法,调用 Menu 的 add 方法添加菜单项(MenuItem)。
2、覆盖 Activity 的 onContextItemSelected() 方法,响应上下文菜单菜单项的单击事件。
3、调用 registerForContextMenu() 方法,为视图注册上下文菜单。
代码:
1 package com.example.menu;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.ContextMenu;
6 import android.view.ContextMenu.ContextMenuInfo;
7 import android.view.Menu;
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
16 private ListView listview = null;
17 private ArrayAdapter<String> adapter;
18 private String info[] = { "选项1", "选项2", "选项3", "选项4","选项5","选项6"};
19
20 @Override
21 protected void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.activity_main);
24 listview=(ListView)findViewById(R.id.listview);
25 adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,info);
26 listview.setAdapter(adapter);
27 this.registerForContextMenu(listview);
28 }
29 public void onCreateContextMenu(ContextMenu menu, View view,
30 ContextMenuInfo info) {
31 menu.setHeaderTitle("我是上下文菜单");
32 menu.setHeaderIcon(R.drawable.ic_launcher);
33 menu.add(1, 1, 1, "我是上下文菜单选项1");
34 menu.add(1, 2, 1, "我是上下文菜单选项2");
35 menu.add(1, 3, 1, "我是上下文菜单选项3");
36 menu.add(1, 4, 1, "我是上下文菜单选项4");
37
38 }
39 public boolean onContextItemSelected(MenuItem item)
40 {
41 switch (item.getItemId()) {
42 case 1:
43 Toast.makeText(this, "点击上下文菜单选项1", Toast.LENGTH_SHORT).show();
44 break;
45 case 2:
46 Toast.makeText(this, "点击上下文菜单选项2", Toast.LENGTH_SHORT).show();
47 break;
48 case 3:
49 Toast.makeText(this, "点击上下文菜单选项3", Toast.LENGTH_SHORT).show();
50 break;
51 case 4:
52 Toast.makeText(this, "点击上下文菜单选项4", Toast.LENGTH_SHORT).show();
53 break;
54 }
55 return super.onContextItemSelected(item);
56
57 }
58 public void onContextMenuClosed(Menu menu)
59 {
60 menu.close();
61 }
62
63 }
注意的问题:
android.R.layout.simple_list_item_1为系统是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。凡是以android.R...都为系统定义好的。
3、子菜单
创建子菜单的步骤:
1、 覆写Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单
2、 调用SubMenu的add()方法,添加子菜单项(addSubMenu)
3、 覆写onOptionsItemSelected()方法,响应子菜单的单击事件
代码:
1 package com.example.menu;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.Menu;
6 import android.view.MenuItem;
7 import android.view.SubMenu;
8 import android.widget.ArrayAdapter;
9 import android.widget.ListView;
10 import android.widget.Toast;
11
12 public class MainActivity extends Activity {
13
14 private ListView listview = null;
15 private ArrayAdapter<String> adapter;
16 private String info[] = { "选项1", "选项2", "选项3", "选项4","选项5","选项6"};
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.activity_main);
22
23 }
24 public boolean onCreateOptionsMenu(Menu menu)
25 {
26 SubMenu s1=menu.addSubMenu(1,0,1,"我是菜单1");
27 s1.setIcon(R.drawable.ic_launcher);
28 s1.setHeaderTitle("子菜单");//设置子菜单标题
29 s1.add(1,1,0,"我是子菜单(1)");
30 s1.add(1, 2, 0, "我是子菜单(2)");
31 s1.add(1, 3, 0, "我是子菜单(3)");
32 s1.add(1, 4, 0, "我是菜子单(4)");
33 SubMenu s2 = menu.addSubMenu(2, 0, 1, "我是菜单2");
34 s2.setIcon(R.drawable.ic_launcher);
35 s2.setHeaderTitle("子菜单");
36 s2.add(2, 1, 1, "我是子菜单(1)");
37 s2.add(2, 2, 1, "我是子菜单(2)");
38 s2.add(2, 3, 1, "我是子菜单(3)");
39 s2.add(2, 4, 1, "我是子菜单(4)");
40 return super.onCreateOptionsMenu(menu);
41 }
42
43 @Override
44 public boolean onOptionsItemSelected(MenuItem item) {
45 if (item.getGroupId() == 1) {// 判断分组
46 switch (item.getItemId()) {
47 case 1:
48 Toast.makeText(MainActivity.this, "菜单1的子菜单1被点击",
49 Toast.LENGTH_SHORT).show();
50 break;
51 case 2:
52 Toast.makeText(MainActivity.this, "菜单1的子菜单2被点击",
53 Toast.LENGTH_SHORT).show();
54 break;
55 case 3:
56 Toast.makeText(MainActivity.this, "菜单1的子菜单3被点击",
57 Toast.LENGTH_SHORT).show();
58 break;
59 case 4:
60 Toast.makeText(MainActivity.this, "菜单1的子菜单4被点击",
61 Toast.LENGTH_SHORT).show();
62 break;
63
64 }
65 } else if (item.getGroupId() == 2) {
66 switch (item.getItemId()) {
67 case 1:
68 Toast.makeText(MainActivity.this, "菜单2的子菜单1被点击",
69 Toast.LENGTH_SHORT).show();
70 break;
71 case 2:
72 Toast.makeText(MainActivity.this, "菜单2的子菜单2被点击",
73 Toast.LENGTH_SHORT).show();
74 break;
75 case 3:
76 Toast.makeText(MainActivity.this, "菜单2的子菜单3被点击",
77 Toast.LENGTH_SHORT).show();
78 break;
79 case 4:
80 Toast.makeText(MainActivity.this, "菜单2的子菜单4被点击",
81 Toast.LENGTH_SHORT).show();
82 break;
83 }
84 }
85
86 return super.onOptionsItemSelected(item);
87 }
88 }