Android SDK提供的菜单有如下几种:
1.选项菜单:最常规的菜单,android中把它叫做option menu
2.子菜单:android中点击子菜单将弹出悬浮窗口显示子菜单项。子菜单不支持嵌套,即子菜单中不能再包括其他子菜单。
3.上下文菜单:android中长按视图控件后出现的菜单,windows点击右键弹出的菜单即上下文菜单
选项菜单最多只能显示6个菜单项,超过6个时,第6个菜单项会被系统替换为一个叫“更多”的子菜单,原来显示不下的菜单项都作为“更多”菜单的子菜单项。如下图:

第6个菜单项自动变为“更多”
点击“更多”显示其他菜单项
每个菜单都包含两个部分:
1. 建立菜单
2. 处理选项动作
"onCreateOptionsMenu" 函数即菜单列的主体。在 Android 机器或模拟器上按下硬体 的"Menu"( 菜单 ) 键,所弹出的菜单列即是靠 "onCreateOptionsMenu" 函数来定义。当我们在Activity 中定义了"onCreateOptionsMenu" 之后,按下"Menu"( 菜单 ) 键时,就会弹出相对应的菜单列。当我们在 Android 应用程序的菜单列上选择了相应的选项后,则是依赖"onOptionsItemSelected" 函数,来负责处理菜单列中各选项所个别对应的动作。
关系可以用下图来表示:
Android的activity已经为我们提前创建好了android.view.Menu对象,并提供了回调方法onCreateOptionsMenu(Menumenu)供我们初始化菜单的内容。该方法只会在选项菜单第一次显示的时候被执行,如果你需要动态改变选项菜单的内容,请使用onPrepareOptionsMenu(Menu)。
public boolean onPrepareOptionsMenu(Menumenu) {//动态的修改菜单title
MenuItemitem=menu.findItem(SAVE_AS);
item.setTitle(item.getTitle()+""+i);
i++;
returnsuper.onPrepareOptionsMenu(menu);
}
代码创建和响应最常用的选项菜单:
publicboolean 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"); //标题
// 如果希望显示菜单,请返回true
returntrue;
}
上面的代码演示了添加菜单项的3种方法,下面解释下第三种方法add(intgroupId, int itemId, int order,CharSequencetitle)。其中,第一个参数是组号,android中你可以给菜单分组,以便快速地操作同一组的菜单。第二个参数指定每个菜单项的唯一ID号,你可以自己指定,也可以让系统来自动分配,在响应菜单时你需要通过ID号来判断哪个菜单被点击了。因此常规的做法是定义一些ID常量,但在android中有更好的方法,就是通过资源文件来引用,这个之后介绍。第三个参数代表菜单项显示顺序的编号,编号小的显示在前面。
使用xml生成菜单:
Options_menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/newFile"
android:icon="@drawable/ic_launcher"
android:title="@string/newFile"/>
<!-- android:icon 设置菜单选项的图标
android:title 设置菜单选项的标题 -->
<item
android:id="@+id/exit"
android:icon="@drawable/ic_launcher"
android:title="@string/exit"/>
</menu>
在activity中加上下面这两句:
MenuInflaterinflater=this.getMenuInflater();
inflater.inflate(R.menu.options_menu,menu);
xml相应的菜单就会加入进去;
inflater在android中建立了从资源文件到对象的桥梁,MenuInflater即把菜单xml资源转换为对象并添加到menu对象中,它可以通过activity的getMenuInflater()得到。我们在MainActivity中重写onCreateOptionsMenu(...)方法。
下面介绍响应菜单项的方式,一共有三种:
1、通过onOptionsItemSelected方法
使用的最多方法是重写activity类的onOptionsItemSelected(MenuItem)回调方法,每当有菜单项被点击时,android就会调用该方法,并传入被点击菜单项。
publicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//响应每个菜单项(通过菜单项的ID)
case1:
// do something here
break;
case2:
// do something here
break;
}
//返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
return true;
}
2.使用监听器
虽然第一种方法是推荐使用的方法,android还是提供了类似java swing的监听器方式来响应菜单。使用监听器的方式分为两步:
//第一步:创建监听器类
class MyMenuItemClickListener implements OnMenuItemClickListener {
@Override
publicboolean onMenuItemClick(MenuItem item) {
// do something here...
returntrue; //finish handling
}
}
//第二步:为菜单项注册监听器
menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());
3.使用Intent响应菜单
第3种方式是直接在MenuItem上调用setIntent(Intentintent)方法,这样android会自动在该菜单被点击时调用startActivity(Intent)
。但是个人认为与其这样还不如直接在onOptionsItemSelected的case里手动调用startActivity(Intent)
来的直观。
创建和响应上下文菜单:
1.在activity的onCreate(...)方法中为一个view注册上下文菜单
2.在onCreateContextMenuInfo(...)中生成上下文菜单。
3.在onContextItemSelected(...)中响应上下文菜单项。
//将上下文菜单绑定到TextView上
TextView tv = (TextView)this.findViewById(R.id.textView);
this.registerForContextMenu(tv); //注册上下文菜单
生成上下文菜单
//每次上下文菜单显示都会调用
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater = this.getMenuInflater();
inflater.inflate(R.menu.sub_menu, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
响应上下文菜单项。
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.menuitem1:
Toast.makeText(this, "subitem1",Toast.LENGTH_LONG).show();
break;
case R.id.menuitem2:
Toast.makeText(this, "subitem2",Toast.LENGTH_LONG).show();
break;
}
return super.onContextItemSelected(item);
}
分享到:
相关推荐
在Android系统中,`Menu`通常出现在活动(Activity)的顶部作为选项菜单,或者在底部弹出作为上下文菜单。在“android menu菜单距中显示”的主题下,我们将深入探讨如何实现`Menu`居中显示,以及与此相关的Android...
总的来说,Android中的Menu机制是提供给用户便捷访问应用功能的关键组件。通过合理的布局设计、交互逻辑以及视觉效果,可以极大地提升应用的易用性和用户体验。在开发过程中,开发者应该充分考虑用户需求,结合应用...
在Android中,我们可以通过重写`onCreateOptionsMenu(Menu menu)`方法来自定义菜单项。但为了实现另类Menu,我们可以创建自己的布局文件,包含我们需要的按钮或其他控件,并在需要显示菜单时将其添加到界面上。这...
Android中的Menu主要分为三类:Option Menu(主菜单)、Context Menu(上下文菜单)和PopupMenu(弹出式菜单)。Option Menu通常在ActionBar或Toolbar中显示,而Context Menu则在长按某个视图时出现,PopupMenu可以...
在Android应用开发中,Menu是用户界面不可或缺的一部分,它提供了在屏幕顶部或底部显示一系列操作选项的功能。Android Menu主要用于在不占用屏幕空间的情况下为用户提供多种交互方式,如在活动(Activity)的顶部弹...
在本资源“menu单选菜单.zip”中,我们很显然关注的是如何在Android中创建和使用单选菜单(Radio Menu)。单选菜单允许用户在多个选项中选择一个,只有一个选项可以被选中。接下来,我们将深入探讨这一主题。 首先...
在Android中,菜单项是通过` onCreateOptionsMenu()`和` onOptionsItemSelected()`方法在`Activity`或`Fragment`中创建和处理的。我们通常使用`MenuItem`对象的`setIcon()`方法来设置图标。例如: ```java @...
CircleMenu for Android Check this library on other platforms: Looking for developers for your project? The Android mockup available here. Requirements Android 4.1 Jelly Bean (API lvl ...
在标题“Android menu单选菜单.rar”中提到的,我们将关注如何在Android中实现一个单选菜单,即单选列菜单(Radio Button in Menu)。这种菜单允许用户在多个选项中选择一个,就像单选按钮一样。 单选菜单通常在...
在Android开发中,`DropDownMenu`是一种常见的交互元素,它允许用户从一组选项中选择一个,通常用于空间有限的界面,如顶部导航栏或者侧滑菜单。本资源提供了`Android DropDownMenu`的一个实现,特点是拥有漂亮的...
单选菜单(Radio Menu)在Android中通常由`RadioGroup`和`RadioButton`组成。`RadioGroup`作为一个容器,管理其内部的`RadioButton`,确保同一时间只有一个`RadioButton`被选中。这种设计模式常用于提供一组互斥的...
在Android中,Menu资源通常定义在`res/menu`目录下的XML文件中。一个简单的Menu XML文件可能如下所示: ```xml <menu xmlns:android="http://schemas.android.com/apk/res/android"> android:id="@+id/action_...
下拉菜单在Android中主要由`Spinner`类实现,它在默认状态下显示一个单一的选项,并在点击时展示一个包含所有可选项的下拉列表。这种控件在有限的空间内提供多个选择,是设计简洁高效UI的好方法。 二、创建下拉菜单...
本文将详细介绍如何在Android中创建和使用Menu菜单,尤其适合初学者。 首先,要使用Android菜单,我们需要在布局文件(如`activity_main.xml`)中不直接添加菜单元素,因为菜单通常在活动中动态生成。菜单的定义...
在Android应用开发中,滑动菜单(Sliding Menu)是一种常见的设计模式,它允许用户通过从屏幕边缘向内滑动来展示隐藏的侧边栏菜单。这种设计在移动设备上非常流行,因为它提供了便捷的导航方式,特别是在内容丰富的...
下面我们将深入探讨如何在Android中实现动态更新Menu菜单。 1. **创建Menu资源** 首先,我们需要在`res/menu`目录下创建一个XML文件,例如`menu_main.xml`,来定义我们的菜单项。在XML中,我们可以定义各个MenuItem...
在Android中,我们可以使用Spinner组件来实现类似的功能,但"Android DropDownMenu"可能提供了更多的定制选项和更好的用户体验。 博客文章(http://blog.csdn.net/u010053224/article/details/51179251)应该详细...
总的来说,Android中的Menu机制提供了丰富的交互方式,开发者可以根据需求灵活运用Options Menu、Context Menu和SubMenu,以创造出功能强大且易于使用的界面。在设计和实现菜单时,要始终关注用户体验,确保菜单既...
本篇将深入探讨如何在Android中创建和使用Menu,以及相关源码分析。 首先,让我们了解Menu的基本结构。在Android中,Menu由`Menu`接口表示,它包含一系列的`MenuItem`对象。每个`MenuItem`代表一个可点击的选项,...