Android 的菜单机制,在 Android 3.0 之前和之后有很大的去别,Android 3.0 推出 ActionBar ,导航的 UI 交互有很大的变化,但菜单的逻辑和接口还是一样的。这里主要介绍下 Android 菜单创建、使用,后面介绍 ActionBar,SherlockActionBar 与 菜单的结合使用,自定义菜单的创建。

Android 菜单主要有4种:

OptionMenu

ContextMenu

PopMenu

SubMenu

下面先介绍下 OptionMenu ,分别使用 xml 文件和 JAVA 代码创建 菜单。

1.OptionMenu

选项菜单,点击 Menu 键时弹出,选中菜单项或者点击其他区域,菜单消失。

optionMenu 的相关方法的实现在 Activity 中 ,相关的方法有:


@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    Log.d(tag, "onCreateOptionsMenu");    return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {    Log.d(tag, "onPrepareOptionsMenu");    return super.onPrepareOptionsMenu(menu);}@Overridepublic void onOptionsMenuClosed(Menu menu) {    System.out.println("onOptionsMenuClosed");    Log.d(tag, "onOptionsMenuClosed");    super.onOptionsMenuClosed(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {    case R.id.action_save:        Log.d(tag, "action_save");        break;    case R.id.action_settings:        Log.d(tag, "action_settings");        break;    case R.id.action_delete:        Log.d(tag, "action_delete");        break;    case R.id.action_edit:        Log.d(tag, "action_edit");        break;    }    return super.onOptionsItemSelected(item);}

onCreateOptionMenu ,在 Activity 生命周期内 只执行一次,onPrepareOptionMenu每次打开菜单都会执行,菜单消失的时候执行onOptionsMenuClosed方法,菜单被选中时执行 onOptionsItemSelected 。

下面看下在 Android 2.3 系统上用 XML 创建的 OptionMenu ,具体效果图如下。



第一张:4个菜单选项,没有图标

第二张:8个菜单项,有图标

第三张:点击更多,没有图标

同样的代码,如果 不兼容(最低版本>11) Android 3.0 之前的版本,在 Android4.4 上是什么效果呢 ?


Android 菜单简析01(OptionsMenu)_第1张图片


第一张:4个菜单选项,没有图标 ,只显示出两个,多了一个更多的标识

第二张:点击更多菜单项

第三张:8个菜单项,有图标,但是显示出的菜单没有文字,更多中菜单项只有文字

第四张:点击更多,没有图标

下面看下具体的代码

1. 编写 menu.xml



<menu xmlns:android="http://schemas.android.com/apk/res/android" ><item    android:id="@+id/action_share"    android:orderInCategory="0"    android:showAsAction="ifRoom"    android:icon="@android:drawable/ic_menu_share"    android:title="share"/><item    android:id="@+id/action_save"    android:orderInCategory="1"    android:showAsAction="ifRoom"    android:icon="@android:drawable/ic_menu_save"    android:title="save"/><item    android:id="@+id/action_search"    android:orderInCategory="2"    android:showAsAction="ifRoom"    android:icon="@android:drawable/ic_menu_search"    android:title="search"/><item    android:id="@+id/action_delete"    android:orderInCategory="4"    android:showAsAction="ifRoom"    android:icon="@android:drawable/ic_menu_delete"    android:title="delectAction"/> <item    android:id="@+id/action_edit"    android:orderInCategory="5"    android:showAsAction="ifRoom"    android:icon="@android:drawable/ic_menu_edit"    android:title="edit"/>   <item    android:id="@+id/action_help"    android:orderInCategory="6"    android:showAsAction="ifRoom"    android:icon="@android:drawable/ic_menu_help"    android:title="help"/>      <item    android:id="@+id/action_compass"    android:orderInCategory="6"    android:showAsAction="ifRoom"    android:icon="@android:drawable/ic_menu_compass"    android:title="compass"/>    </menu>

android:orderInCategory 菜单项在 菜单中的位置


2. 在 Activity 中添加 菜单



@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    MenuInflater inflater = getMenuInflater();    Log.d(tag, "onCreateOptionsMenu");    inflater.inflate(R.menu.main_icon, menu);    return super.onCreateOptionsMenu(menu);}

3. 菜单事件的响应


    @Overridepublic boolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {    case R.id.action_save:        Log.d(tag, "action_save");        break;    case R.id.action_settings:        Log.d(tag, "action_settings");        break;    case R.id.action_delete:        Log.d(tag, "action_delete");        break;    case R.id.action_edit:        Log.d(tag, "action_edit");        break;    case R.id.action_search:        Log.d(tag, "action_search");        break;    }    return super.onOptionsItemSelected(item);}

这样,就完成了菜单的创建、使用、响应。

Android 官方推荐使用 XML 创建菜单,同时也可以在 JAVA 代码中创建 菜单。实现过程如下

a. 直接在 onCreateOptionsMenu() 方法中添加菜单项


  @Overridepublic boolean onCreateOptionsMenu(Menu menu) {    MenuInflater inflater = getMenuInflater();    //menu.add(int groupid,int itemid,int orderid,String title)方法参数    //add 方法返回一个 MenuItem 对象,可以添加图标,调用 setIcon() 方法    Log.d(tag, "onCreateOptionsMenu");    menu.add(0, Menu.FIRST+1, Menu.FIRST+1, menusStrings[0]).setIcon(android.R.drawable.ic_menu_add);    menu.add(0, Menu.FIRST+2, Menu.FIRST+2, menusStrings[1]).setIcon(android.R.drawable.ic_menu_agenda);    menu.add(0, Menu.FIRST+3, Menu.FIRST+3, menusStrings[2]).setIcon(android.R.drawable.ic_menu_call);    menu.add(0, Menu.FIRST+4, Menu.FIRST+4, menusStrings[3]).setIcon(android.R.drawable.ic_menu_close_clear_cancel);    menu.add(0, Menu.FIRST+5, Menu.FIRST+5, menusStrings[4]).setIcon(android.R.drawable.ic_menu_crop);    menu.add(0, Menu.FIRST+6, Menu.FIRST+6, menusStrings[5]).setIcon(android.R.drawable.ic_menu_upload);    inflater.inflate(R.menu.main, menu);    return super.onCreateOptionsMenu(menu);}

b. 响应菜单选中事件

响应选中事件方式和上面一样,就不再贴出代码了~。


关于 OptionsMenu的 介绍就这些啦,大家有问题在评论交流啊


下一篇给大家介绍 ContexMenu 的使用


参考资料:

官方手册

eoe menu wiki

参考博文 menu 介绍

参考博文 menu 介绍






更多相关文章

  1. Android入门教程五十五之DrawerLayout(官方侧滑菜单)的简单使用
  2. Android Studio的Gradle文件方法说明
  3. 获取Android SDK 源代码并在Eclipse中关联查看的方法
  4. Android SDK安装方法
  5. Android百度地图(一):百度地图定位sdk 类方法参数、定位原理详细

随机推荐

  1. [Android]【安卓】开发小结
  2. android中的数据库操作
  3. 诡异特殊的EditText 弹出软键盘遮挡BUG
  4. ANDROID的MANIFEST.XML文件字段解析
  5. 编译android源码出现的问题解析
  6. Android安全加密:非对称加密
  7. SQLite 数据库 WAL 工作模式原理简介
  8. Android(安卓)ListView控件基本用法
  9. android开发系列文章集合
  10. android之layout布局和ListView中的一些