Android创建并响应选项菜单

创建options menu

之前提到,Android的activity已经为我们提前创建好了android.view.Menu对象,并提供了回调方法onCreateOptionsMenu(Menu menu)供我们初始化菜单的内容。该方法只会在选项菜单第一次显示的时候被执行,如果你需要动态改变选项菜单的内容,请使用 onPrepareOptionsMenu(Menu)

@Overridepublicboolean onCreateOptionsMenu(Menu menu) {    // 调用父类方法来加入系统菜单    // 虽然目前android还没有系统菜单,但是为了兼容到以后的版本,最好加上super.onCreateOptionsMenu(menu);

    // 添加菜单项(多种方式)    // 1.直接指定标题    menu.add("菜单项1");    // 2.通过资源指定标题    menu.add(R.string.menuitem2);    // 3.显示指定菜单项的组号、ID、排序号、标题    menu.add(            1,            //组号            Menu.FIRST, //唯一的ID号            Menu.FIRST, //排序号"菜单项3"); //标题

    // 如果希望显示菜单,请返回truereturntrue;}

********也可以


上面的代码演示了添加菜单项的3种方法,下面解释下第三种方法add(int groupId, int itemId, int order, CharSequence title)。其中,第一个参数是组号,android中你可以给菜单分组,以便快速地操作同一组的菜单。第二个参数指定每个菜单项的唯一ID号,你可以自己指定,也可以让系统来自动分配,在响应菜单时你需要通过ID号来判断哪个菜单被点击了。因此常规的做法是定义一些ID常量,但在android中有更好的方法,就是通过资源文件来引用,这个之后介绍。第三个参数代表菜单项显示顺序的编号,编号小的显示在前面。

给菜单项分组

@Overridepublicboolean onCreateOptionsMenu(Menu menu) {    super.onCreateOptionsMenu(menu);    // 添加4个菜单项,分成2组int group1 =1;    int gourp2 =2;    menu.add(group1, 1, 1, "item 1");    menu.add(group1, 2, 2, "item 2");    menu.add(gourp2, 3, 3, "item 3");    menu.add(gourp2, 4, 4, "item 4");    // 显示菜单returntrue;}

你可以向上面这样给菜单项分组,分组之后就能使用menu中提供的方法对组进行操作了,如下:

menu.removeGroup(group1);    //删除一组菜单menu.setGroupVisible(gourp2, visible);    //设置一组菜单是否可见menu.setGroupEnabled(gourp2, enabled);    //设置一组菜单是否可点menu.setGroupCheckable(gourp2, checkable, exclusive);    //设置一组菜单的勾选情况

响应菜单项

android提供了多种响应菜单项的方式,下面一一介绍

1、通过onOptionsItemSelected方法

使用的最多方法是重写activity类的 onOptionsItemSelected(MenuItem)回调方法,每当有菜单项被点击时,android就会调用该方法,并传入被点击菜单项。

@Overridepublicboolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {    //响应每个菜单项(通过菜单项的ID)case1:        // do something herebreak;    case2:        // do something herebreak;    case3:        // do something herebreak;    case4:        // do something herebreak;    default:        //对没有处理的事件,交给父类来处理returnsuper.onOptionsItemSelected(item);    }    //返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了returntrue;}

以上代码可作为使用onOptionsItemSelected方法响应菜单的模板来使用,这里为了方便起见将菜单ID硬编码在程序里,你可以使用常量或资源ID来使代码更健壮。

2.使用监听器

虽然第一种方法是推荐使用的方法,android还是提供了类似java swing的监听器方式来响应菜单。使用监听器的方式分为两步:

//第一步:创建监听器类class MyMenuItemClickListener implements OnMenuItemClickListener {    @Override    publicboolean onMenuItemClick(MenuItem item) {        // do something here...returntrue;    //finish handling    }}

//第二步:为菜单项注册监听器menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());

android文档对onMenuItemClick(MenuItem item)回调方法的说明是"Called when a menu item has been invoked. This is the first code that is executed; if it returns true, no other callbacks will be executed." 可见该方法先于onOptionsItemSelected执行

3.使用Intent响应菜单

第3种方式是直接在MenuItem上调用setIntent(Intent intent)方法,这样android会自动在该菜单被点击时调用 startActivity(Intent)。但是个人认为与其这样还不如直接在onOptionsItemSelected的case里手动调用 startActivity(Intent)来的直观。

时间: 2024-10-11 12:48:07

Android创建并响应选项菜单的相关文章

【转】android创建Popwindow弹出菜单的两种方式

方法一的Activity [java] view plaincopy package com.app.test02; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import

[android](学习笔记7)为应用程序添加选项菜单

1 在xml文件中定义选项菜单: 创建res/menu目录,并添加xml文件:选择New-Android XML File.选择Menu文件资源类型: 打开新建的xml文件,切换到xml编辑视图,添加新的item元素: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" &g

安卓开发复习笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)

菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 菜单的实现方式有2种:一种是通过布局文件xml生成菜单,另一种是通过代码生成. 三种菜单内容有点多,不过大体相似,一次性讲完吧,本人偏好代码动态生成,下面就以代码为例. 1.选项菜单(OptionsMenu) 先来看下选项菜单的效果图:   在一个Activity界面中点击手机Menu键,在屏幕下方弹出的菜单

Android开发系列(二十八):使用SubMenu创建选项菜单

大部分手机上边都会有一个"MENU"键,在一个应用安装到手机上之后,可以通过"MENU"显示该应用关联的菜单. 但是,从Android 3.0开始,Android不再要求手机设备上必须提供MENU案件,虽然现在还有很多手机都会提供MENU按键,但是有一部分已经不再提供.在这种情况下,Android推荐使用ActionBar来代替菜单.在以后的博文中我们会介绍Android对ActionBar的支持 Menu接口是实现这个功能的按键之一,其中SubMenu继承自Men

Android选项菜单和上下文菜单解析

选项菜单 创建选项菜单 Activity类的onCreateOptionMenu事件方法用来创建选项菜单,该方法定义如下: @Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } 一般需要将创建选项菜单的代码放在onCreateOptionMenu方法中.通过Menu.add方法可以添加一个选项菜单.该 方法有4种重载形式,定义如下: public Me

Android学习(二十一)OptionsMenu选项菜单

一.OptionsMenu选项菜单 在应用程序中点击功能按钮会弹出选项菜单,点击可以实现具体功能. 二.实现思路: 1.创建选项菜单: onCreateOptionsMenu(); 2.设置菜单项可用代码动态设置menu.add();还可以通过xml设置Menuinflater.infalte(R.menu.menu); 3.设置菜单的点击事件:onOptionsItemSelect(); 三.示例代码: 自定义菜单XML: <menu xmlns:android="http://sche

Android 选项菜单Option Menu 使用

每个Activity都可以有至多一个选项菜单 菜单的视图文件最好在res下再新建一个目录存放,菜单视图文件名就是一个菜单资源标识 选项菜单的创建和使用 xml部分 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas

ADT后在windows菜单下找不到Android SDK Manager和Android Virtual Device Manager选项的解决办法

今天一大早打开ADT准备编译android工程的时候,突然发现windows菜单下的Android SDK Manager和Android Virtual Device Manager选项不见了.因为我昨天把一个android工程转换为了C/C++工程,就莫名其妙出了这个问题.           在网上搜了一下,找到了解决方案: 在ADT中点击window→Customize Perspective→Command Groups availability→Available command g

Android基础——选项菜单,上下文菜单

首先要在资源目录下新建menu目录,所有的菜单布局文件都在这个目录下 选项菜单和上下文菜单的资源文件 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/message" android:titl