欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android中使用菜单

程序员文章站 2022-05-26 20:37:04
...

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;
}
 
搞定。看看酷酷的Menu截图吧:
Android中使用菜单

地图是雄伟的紫禁城~~绿波环绕,金瓦红墙,气势非凡!