Android中菜单的使用

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){
//选项菜单创建之前(onCreateOptionsMenu()方法)之前调用
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);//为一个view注册上下文菜单</pre>

三、子菜单

子菜单就是将相同功能的分组进行多级显示。

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) {
//调用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);
}

原文发表于2014-08-15 17:28 原文链接:http://my.oschina.net/whilu/blog/301627