您的位置:华清远见教育科技集团 >> Android资料 >> Android系统菜单之选项菜单  
 
Android系统菜单之选项菜单
分享到:

菜单是应用程序中非常重要的组成部分,能够在不占用界面空间的前提下,为应用程序提供统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口。Android系统支持3种菜单:选项菜单(Option Menu)、子菜单(Submenu)、快捷菜单(Context Menu)。本文先来介绍Android选项菜单

选项菜单是一种经常被使用的Android系统菜单,可以分为图标菜单(Icon Menu)和扩展菜单(Expanded Menu)两类,可通过“菜单键”(Menu key)打开。

图标菜单能够同时显示文字和图标,多支持6个子项,但图标菜单不支持单选框和复选框。

扩展菜单在图标菜单子项多余6个时才出现,通过点击图标菜单后的子项“More”才能打开。扩展菜单是垂直的列表型菜单,不能够显示图标,但支持单选框和复选框。

    
图1 Tab标签页效果图                      图2 扩展菜单

1.重写onCreateOptionMenu()方法

在Android应用程序中使用选项菜单,需重载Activity的onCreateOptionMenu()方法。初次使用选项菜单时,会调用onCreateOptionMenu()方法,用来初始化菜单子项的相关内容,因此这里需要设置菜单子项自身的子项ID和组ID、菜单子项显示的文字和图片等。代码如代码清单1所示。

代码清单1 重载onCreateOptionMenu()方法

final static int MENU_DOWNLOAD = Menu.FIRST;
    final static int MENU_UPLOAD = Menu.FIRST+1;
    @Override
    public boolean onCreateOptionsMenu(Menu menu){
    menu.add(0,MENU_DOWNLOAD,0,"下载设置");
        menu.add(0,MENU_UPLOAD,1,"上传设置");
        return true;
    }

第1行和第2行代码将菜单子项ID定义成静态常量,并使用静态常量Menu.FIRST(整数类型,值为1)定义第一个菜单子项,以后的菜单子项仅需在Menu.FIRST增加相应的数值即可。

第4行代码Menu对象作为一个参数被传递到方法内部,因此在onCreateOptionsMenu()方法中,用户可以使用Menu对象的add()方法添加菜单子项。其中add()方法的语法如下。

代码清单5-24 tab2.xml

MenuItem android.view.Menu.add(int groupId, int itemId, int order, CharSequence title)

第1个参数groupId是组ID,用以批量的对菜单子项进行处理和排序;第2个参数itemId是子项ID,是每一个菜单子项的唯一标识,通过子项ID使应用程序能够定位到用户所选择的菜单子项;第3个参数order是定义菜单子项在选项菜单中的排列顺序;第4个参数title是菜单子项所显示的标题。

第7行代码是onCreateOptionsMenu()方法返回值,方法的返回值类型为布尔型:返回true将显示方法中设置的菜单,否则不能够显示菜单。

做完以上步骤后,使用setIcon()方法和setShortcut()方法,添加菜单子项的图标和快捷键,如代码清单2所示。

代码清单2 添加菜单子项的图标和快捷键

menu.add(0,MENU_DOWNLOAD,0,"下载设置")
    .setIcon(R.drawable.download);
    .setShortcut(','d');

代码中,利用MENU_DOWNLOAD菜单设置图标和快捷键的代码;第2行代码中使用了新的图像资源,用户将需要使用的图像文件复制到/res/drawable目录下;setShortcut()方法第一个参数是为数字键盘设定的快捷键,第二个参数是为全键盘设定的快捷键,且不区分字母的大小写。

2.重写onPrepareOptionsMenu()方法

重载onPrepareOptionsMenu()方法,能够动态地添加、删除菜单子项,或修改菜单的标题、图标和可见性等内容。onPrepareOptionsMenu()方法的返回值的含义与onCreateOptions Menu()方法相同:返回true则显示菜单,返回false则不显示菜单。

代码清单3所示的代码是在用户每次打开选项菜单时,在菜单子项中显示用户打开该子项的次数。

代码清单3 菜单子项中显示用户打开该子项的次数

static int MenuUploadCounter = 0;
    @Override
    public boolean onPrepareOptionsMenu(Menu menu){
        MenuItem uploadItem = menu.findItem(MENU_UPLOAD);
        uploadItem.setTitle("上传设置:" +String.valueOf(MenuUploadCounter));
        return true;
    }

第1行代码设置一个菜单子项的计数器,用来统计用户打开“上传设置”子项的次数;第4行代码是通过将菜单子项的ID传递给menu.findItem()方法,获取到菜单子项的对象;第5行代码是通过MenuItem的setTitle()方法修改菜单标题。

注:onCreateOptionMenu()方法和onPrepareOptionsMenu()方法的区别在于:onCreateOptionMenu()方法在Menu显示之前只调用一次;而onPrepareOptionsMenu()方法在每次显示Menu之前都会调用,一般用它执行Menu的更新操作。

3.onOptionsItemSelected ()方法

onOptionsItemSelected ()方法能够处理菜单选择事件,且该方法在每次单击菜单子项时都会被调用。

下面的代码说明了如何通过菜单子项的ID执行不同的操作。

代码清单4 onOptionsItemSelected()

@Override
    public boolean onOptionsItemSelected(MenuItem item){
        switch(item.getItemId()){
            case MENU_DOWNLOAD:
            MenuDownlaodCounter++;
            return true;
            case MENU_UPLOAD:
            MenuUploadCounter++;
            return true;
        }
        return false;
    }

onOptionsItemSelected ()的返回值表示是否对菜单的选择事件进行处理,如果已经处理过则返回true,否则返回false;第3行的MenuItem.getItemId()方法可以获取到被选择菜单子项的ID。

程序运行后,通过单击“菜单键”可以调出程序设计的两个菜单子项,如图5-22所示。


图3 运行效果图

 更多相关文章

·Android系统控件TabHost
·Android系统控件ListView
·Android系统控件Spinner
·Android系统控件CheckBox 和 RadioButton
·Android系统控件Button 和 ImageButton