Android一共有三种形式的菜单:

1.选项菜单(optinosMenu)

2.上下文菜单(ContextMenu)

3.子菜单(subMenu)

其中最常用的就是选项菜单(optionsMenu),该菜单在点击menu按键后会在对应的Activity底部显示出来。

1.Activity菜单机制(dialog类似)

Activity有一套机制来实现对菜单的管理,方法如下:

   1.publicbooleanonCreateOptionsMenu(Menumenu)

此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。

返回true则显示该menu,false则不显示;

(只会在第一次初始化菜单时调用)

2.publicbooleanonPrepareOptionsMenu(Menumenu)

在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用。

同样的,返回true则显示该menu,false则不显示;

(可以通过此方法动态的改变菜单的状态,比如加载不同的菜单等)

3.publicvoidonOptionsMenuClosed(Menumenu)

每次菜单被关闭时调用.

(菜单被关闭有三种情形,menu按钮被再次点击、back按钮被点击或者用户选择了某一个菜单项)

4.publicbooleanonOptionsItemSelected(MenuItemitem)

菜单项被点击时调用,也就是菜单项的监听方法。

通过这几个方法,可以得知,对于Activity,同一时间只能显示和监听一个Menu对象。

2.添加菜单:

可以在onCreateOptionsMenu或者onPrepareOptionsMenu方法中来添加菜单

2.1代码添加:

menu.add((intgroupId,intitemId,intorder,charsequencetitle).setIcon(drawableID)

add()方法的四个参数,依次是:

1、组别,如果不分组的话就写Menu.NONE,

2、Id,这个很重要,Android根据这个Id来确定不同的菜单

3、顺序,哪个菜单项在前面由这个参数的大小决定

4、文本,菜单项的显示文本

add()方法返回的是MenuItem对象,调用其setIcon()方法,为相应MenuItem设置Icon

示例:

publicbooleanonCreateOptionsMenu(Menumenu){

super.onCreateOptionsMenu(menu);

menu.add(Menu.NONE,Menu.First+1,0,"设置").setIcon(R.drawable.setting);

returntrue;

}

2.2布局文件添加:

getMenuInflater().inflate(R.menu.options_menu,menu);

调用Activity的getMenuInflater()得到一个MenuInflater,

使用inflate方法来把布局文件中的定义的菜单加载给第二个参数所对应的menu对象

示例:

@Override

publicbooleanonCreateOptionsMenu(Menumenu){

super.onCreateOptionsMenu(menu);

getMenuInflater().inflate(R.menu.options_menu,menu);

returntrue;

}

布局文件:

在res目录下建立一个menu文件夹,并创建布局文件:options_menu.xml

<?xmlversion="1.0"encoding="utf-8"?>

<menuxmlns:android="http://schemas.android.com/apk/res/android">

<itemandroid:id="@+id/menu_setting"android:title="设置"android:icon="@drawable/setting"></item>

</menu>

3.菜单项监听:

只要菜单中的菜单项被点击,都会触发onOptionsItemSelected(MenuItemitem)

item参数即为被点击的菜单项,那么需要在此方法内判断哪个Item被点击了,从而实现不同的操作。

对于两种不同的添加菜单方法,判断的方法有一点区别,但本质是一样的。

3.1代码添加菜单的判断方法

@Override

publicbooleanonOptionsItemSelected(MenuItemitem){

super.onOptionsItemSelected(item);

switch(item.getItemId())//得到被点击的item的itemId

{

caseMenu.First+1://对应的ID就是在add方法中所设定的Id

break;

caseMenu.First+2:

break;

}

returntrue;

}

3.2布局文件添加菜单的判断方法:

@Override

publicbooleanonOptionsItemSelected(MenuItemitem){

super.onOptionsItemSelected(item);

switch(item.getItemId())//得到被点击的item的itemId

{

caseR.id.menu_setting://这里的Id就是布局文件中定义的Id,在用R.id.XXX的方法获取出来

break;

caseR.id.menu_info:

break;

}

returntrue;

}

例子:

<span style="font-size:18px;">public boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);menu.add(Menu.NONE,BACK_GAME,0,"返回游戏");menu.add(Menu.NONE,  HELP_GAME,1, "游戏帮助");menu.add(Menu.NONE, SET_GAME,  2,"游戏设置");menu.add(Menu.NONE,  BACK_MENU,3, "返回主菜单");return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {super.onOptionsItemSelected(item);switch (item.getItemId()) {case BACK_GAME:backGame();break;case HELP_GAME:helpGame();//return true;break;case SET_GAME:setGame();break;case BACK_MENU:backMenu();break; default:break;}return true;}</span>


更多相关文章

  1. setBackgroundDrawable和setBackgroundResource的区别
  2. android 得到是否插入耳机设备
  3. Android调用本机程序执行文件的方法
  4. android 布局管理
  5. ViewFlipper 中文文档
  6. Android(安卓)Notification从notify到添加view的处理流程
  7. Android::整理基础之—— startActivityForResult相关
  8. Android(安卓)资料整理
  9. Android关于获取时间的记录(小结)

随机推荐

  1. android百度地图(二)之定位
  2. android.intent.action.MEDIA_MOUNTED广
  3. Android 内存泄漏检测之Profiler
  4. Android中的数据库——SQLite
  5. Android之开发BLE 详细步骤
  6. Android 微博登录
  7. 2011.06.03(2)——— android 1.6 launcher
  8. 关于用Android的API重写drawRegion方法的
  9. android Intent使用
  10. android和ios button点击变暗效果