首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android中运用菜单

2012-09-06 
Android中使用菜单Android程序使用菜单是非常之方便的,而且Android系统的菜单也做得很有特色,系统有专门的

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) 方法,示例如下:

@Overridepublic 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,在后面菜单事件处理时要用到,第三个参数为排序值,用来指定菜单项顺序,可以无视,最后一个参数为菜单项的标题,在屏幕上面显示用。

响应的事件处理代码示例如下:

@Overridepublic 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中运用菜单
地图是雄伟的紫禁城~~绿波环绕,金瓦红墙,气势非凡!

?

?

?

?

热点排行