Android中使用菜单
Android程序使用菜单是非常之方便的,而且Android系统的菜单也做得很有特色,系统有专门的Menu键,而且菜单的样式不同于通常的弹 出或者下拉菜单,Android的菜单更像是堆砌起来的。
Menu是android.view包里面的接口,它菜单通常是作为Activity的一部分。在Android的文档里面这样描述Menu:
通常,每个Activity都支持(这里意思应该是已经创建好,默认存在菜单)一个选项菜单(option menu)和相应的事件响应。可以为菜单添加菜单项和相应的事件处理。添加菜单项最简单的方法是是使用XML文件,在Menu标签下使用 MenuInflater,然后重载Activity的
onOptionsItemSelected(MenuItem)
方法 或者onContextItemSelected(MenuItem)
方法,在方法体里添加事件处理代码。
总的来说,有三种类型的菜单:
Contex Menus,情境菜单:不支持菜单快捷键和图标。
Options Menus,选项菜单:支持图标,但不支持菜单项选中标记。
Sub menus,子菜单,不支持图标,不能再有子菜单。
除了使用xml文件的形式,同样也可以在代码中添加菜单项,只需要重载Activity的public boolean onCreateOptionsMenu(Menu menu) 方法,示例如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, Menu.FIRST, Menu.NONE, "我的位置");
menu.add(0, Menu.FIRST + 1, Menu.NONE, "卫星地图");
menu.add(0, Menu.FIRST + 2, Menu.NONE, "清除图层");
return true;
}
Menu.add(int groupId, int itemId, int order, CharSequence title)方法,第一个参数用来指定菜单项分组,API文档说分组可以用来进行分组状态更新,第二个参数很重要,是菜单项的唯一ID,在后面菜单事件处 理时要用到,第三个参数为排序值,用来指定菜单项顺序,可以无视,最后一个参数为菜单项的标题,在屏幕上面显示用。
响应的事件处理代码示例如下:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {//获取菜单项的ID,即前面Menu.add方法的第二个参数
case Menu.FIRST:
myLocationOverlay.runOnFirstFix(new Runnable() {//定位,并移动地图到自己的位置
public void run() {
mc.animateTo(myLocationOverlay.getMyLocation());
}
});
break;
case Menu.FIRST + 1://切换地图视图
if (isSatelite) {
map.setSatellite(false);
map.setStreetView(false);
item.setTitle("卫星地图");
isSatelite = false;
} else {
map.setSatellite(true);
map.setStreetView(true);
item.setTitle("普通地图");
isSatelite = true;
}
break;
case Menu.FIRST + 2://清楚所有标记
overlay.clear();
break;
default:
break;
}
return true;
}
另一种方式是使用XML文件和MenuInflater类来创建菜单。Android使用XML作为资源管理的方式,独立于编码,具有更高的灵活性 和扩展性。
在res下面建立menu文件夹,然后新建一个xml文档,命名为menu.xml。要建立的菜单项与上面相同。文件内容如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="我的位置" android:id="@+id/ID_MYPOS"></item> <item android:title="卫星地图" android:id="@+id/ID_MAPTYPE"></item> <item android:title="清除图层" android:id="@+id/ID_CLEAR"></item> </menu>
提示:ADT带有XML文件编辑功能,可以根据XML文件类型来启动适合的编辑工具,无需手动编写XML文档,用图形化工具即可。
需要注意的是这里将菜单项的ID进行了修改,让Android SDK自动生成ID,所以需要修改onOptionsItemSelected里面的Switch case条件。修改为:
switch (item.getItemId()) {
case R.id.ID_MYPOS:
//...
break;
case R.id.ID_MAPTYPE:
//...
break;
case R.id.ID_CLEAR:
//...
break;
default:
break;
}
上一篇: HTML5新增API
下一篇: Android Menu菜单的基本使用