Android-菜单项选项
Android第8章 菜单
8.4.1菜单的XML结构(XML MENU)
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="/apk/res/android"> <item> … </item> <group> … </group> ……. </menu> 根元素必须是<menu>。 <menu>元素中是<item>元素和<group>元素,后者表示可 以作为一组项目来操作的菜单项的集合。 通过在<item>元素中添加<menu>元素来指定子菜单,然 后再使用这个新的<menu>元素来描述子菜单的内容。
8.1.2添加菜单项和子菜单(add Menu)
所有add()方法都返回MenuItem实例,通过这个实例 可以调整现有菜单项的设置(例如,修改菜单项的文本)。 增加图标,也很简单,如下: MenuItem item1 = menu.add(Menu.NONE,ONE_ID,Menu.NONE,"1 Pixel"); item1.setIcon(R.drawable.android_normal);
子菜单
(2)在MainActivity.java输入如下所示的关键代码
@Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch(item.getItemId()){//根据菜单的ID,决定选择哪个参数 case 0: Toast.makeText(MainActivity.this, "声音已经关闭", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(MainActivity.this, "声音已经打开", Toast.LENGTH_LONG).show(); break; } return super.onOptionsItemSelected(item); }
(2)在menu/main.xml中输入如下代码
<menu xmlns:android="/apk/res/android" > <item android:id="@+id/menu_profile" android:title="@string/personalfile"/> <item android:id="@+id/menu_letter" android:title="@string/personalletter"/> <item android:id="@+id/menu_register" android:title="@string/register"/> <item android:id="@+id/menu_about" android:title="@string/about"/> <item android:id="@+id/menu_loginout" android:title="@string/loginout"/> <item android:id="@+id/menu_quit" android:title="@string/quit"/> </menu>
android studio onoptionsitemselected用法
android studio onoptionsitemselected用法在Android开发中,Android Studio是一款非常常用的集成开发环境。
其中,onOptionsItemSelected方法是一个重要的回调方法,用于处理选项菜单项的选择事件。
本文将介绍android studio onoptionsitemselected的用法。
首先,我们需要了解onOptionsItemSelected方法的作用。
这个方法是在Activity中的菜单选项被选择时调用的。
当用户点击菜单项时,系统会自动调用该方法,并传入一个MenuItem对象作为参数。
我们可以根据传入的MenuItem对象的ID来判断用户选择了哪个菜单项。
在Android Studio中,我们可以通过重写Activity的onOptionsItemSelected方法来实现对菜单项选择事件的响应。
我们可以在该方法中编写逻辑代码,根据不同的菜单项ID来执行相应的操作。
下面是一个示例代码,演示了如何使用onOptionsItemSelected方法来处理菜单项选择事件:```java@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();switch (id) {case R.id.menu_item1:// 处理菜单项1的选择事件// ...return true;case R.id.menu_item2:// 处理菜单项2的选择事件// ...return true;case R.id.menu_item3:// 处理菜单项3的选择事件// ...return true;default:return super.onOptionsItemSelected(item);}}```在上述代码中,我们首先通过item.getItemId()方法获取用户选择的菜单项的ID。
Android基础教程(五)之-Menu功能菜单设计
大家好,我们今天这一节讲的是Android功能菜单的设计,程序里定义了两个菜单子项,一个是"关于",一个是"退出",当点击"关于"时候,新建一个Toast 提示,当点击"退出"时,我们将结束程序.程序里除了默认覆盖的onCreate 外之外,还需要另外新建两个类函数:onCreateOptionsmenu ()与onOptionsItem Selected (),前者为创建Menu 菜单的项目,后者则是处理菜单被选择运行后的事件处理.看一下效果图:我们只在一个文件里作了改动,也就是MenuDemo.java ,代码如下:1package com.android.test;23import android.app.Activity;4import android.os.Bundle;5import android.view.Menu;6import android.view.MenuItem;7import android.widget.Toast;89public class MenuDemo extends Activity {10public void onCreate(Bundle savedInstanceState) {11super.onCreate(savedInstanceState);12 setContentView(yout.main);13 }1415 // 创建菜单16public boolean onCreateOptionsMenu(Menu menu) {17 menu.add(0, 0, 0, "关于");18 menu.add(0, 1, 1, "退出");19return super.onCreateOptionsMenu(menu);20 }21 //菜单响应22public boolean onOptionsItemSelected(MenuItem item) {23super.onOptionsItemSelected(item);24switch (item.getItemId()) {25case 0:26 Toast.makeText(MenuDemo.this, "欢迎来到魏祝林的blog", Toast.LENGTH_LONG).show();27case 1:28this.finish();29 }30return true;31 }32}33。
android中Menu的使用
android的Menu使用1。
普通的Menu先来看看最简单的Menu怎样实现。
在主Activity中覆盖onCreateOptionsMenu(Menu menu)方法。
代码@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubmenu.add(0, 1, 1, "苹果");menu.add(0, 2, 2, "香蕉");return super.onCreateOptionsMenu(menu);}这样就有了两个菜单选项。
如果要添加点击事件,则要覆盖onOptionsItemSelected(Me nuItem item)方法。
代码@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubif(item.getItemId() == 1){Toast t = Toast.makeText(this, "你选的是苹果", Toast.LENGTH_SHORT); t.show();}else if(item.getItemId() == 2){Toast t = Toast.makeText(this, "你选的是香蕉", Toast.LENGTH_SHORT); t.show();}return true;}2。
SubMenuSubMenu的制作也同样简单,在第一段代码onCreateOptionsMenu(Menu menu)方法中加入几句,成下面这样:代码@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubmenu.add(0, 1, 1, "苹果");menu.add(0, 2, 2, "香蕉");SubMenu subMenu = menu.addSubMenu(1, 100, 100, "桃子");subMenu.add(2, 101, 101, "大桃子");subMenu.add(2, 102, 102, "小桃子");return true;}点击“桃子”后就会出现子菜单,有两个子选项,分别是“大桃子”和“小桃子”。
Android菜单和对话框
案例:通过菜单项启动另一个Activity,效果如图4-2所示。当选择 了“Start the other Activity”时,启动另一个Activity。 步骤见书中内容
4.2 上下文菜单
Android用ContextMenu来代表上下文菜单,类似于桌面程序的右键弹出式菜单,在 Android中不是通过用户右击鼠标而得到,而是通过长时间按住界面上的元素得到事先 设计好的上下文菜单。开发上下文菜单的方法与选项菜单的方法基本相似,因为 ContextMenu也是Menu的子类,所以可用相同的方法为它添加菜单项。其区别在于: 开发上下文菜单不是重写onCreateOptionsMenu(Menu menu)方法,而是调用onCreate ContextMenu (ContextMenu menu, View source,ContextMenu.ContextMenuIfno menuInfo) 方法,该方法在每次启动上下文菜单时都会被调用一次,在该方法中可以通过使用 add()方法添加相应的菜 单项。
4.1.3 与菜单项关联的Activity的设置
在应用程序中如果需要单击某个菜单项来启动其他Activity或者Service时,不需要 开发者编写任何事件处理代码,只要调用MenuItem的setIntent(Intent intent)方法即 可。该方法实现把菜单项与指定的Intent关联在一起,当用户单击该菜单项时,该 Intent所代表的组件将会被启动。
开发上下文菜单的步骤如下。 (1)重写onCreateContextMenu()方法。 (2)调用Activity的registerForContextMenu(View view)为view组件注册上 下文菜单。 ( 3 )重载 onContextItemSelected(MenuItem mi) 或者绑定事件监听器,对 菜单项进行事件相应。 案例:定义上下文菜单,让用户进行颜色选择,根据用户所选颜色的不同 来更改文本框的背景颜色,效果如图4-3所示。
AndroidUI之菜单对话框
《Android基础应用》AndroidUI之菜单对话框⏹本章任务⏹使用Android开发菜单应用⏹使用Android开发XML菜单⏹使用Android开发对话框应用⏹本章目标⏹掌握Android中的菜单⏹掌握Android中的对话框1.Android基本控件菜单菜单是应用程序中非常重要的组成部分,能够在不占用界面空间的前提下,为应用程序提供了统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口Android系统支持三种菜单选项菜单(Option Menu)子菜单(Submenu)快捷菜单(Context Menu)1.1选项菜单选项菜单是一种经常被使用的Android系统菜单打开方式:通过“菜单键”(MENU key)打开选项菜单分类●图标菜单(Icon Menu)图标菜单能够同时显示文字和图标的菜单,最多支持6个子项图标菜单不支持单选框和复选框●扩展菜单(Expanded Menu)扩展菜单是在图标菜单子项多余6个时才出现,通过点击图标菜单最后的子项“More”才能打开,扩展菜单是垂直的列表型菜单⏹不能够显示图标⏹支持单选框和复选框创建一个选项菜单的步骤●覆盖Activity的onCreateOptionsMenu(Menu menu)函数●调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标●当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应事件示例一示例的实现结果onCreateOptionsMenu()函数●函数返回值:布尔值,表示是否显示该函数中设置的菜单●参数:Menu对象onCreateOptionsMenu函数仅在第一次使用菜单时被调用一次Menu对象的add()方法添加菜单子项,这个函数有四个重载函数public MenuItem add(CharSequence title)●参数:指定菜单上的显示文字public MenuItem add(int titleRes)●参数:菜单标题的引用通过string.xml中添加public MenuItem add(int groupId, int itemId, int order, CharSequence title); public MenuItem add(int groupId, int itemId, int order, int titleRes);●groudId:是指组ID,用以批量地对菜单子项进行处理和排序●itemId:是子项ID,是每一个菜单子项的唯一标识●order:指定菜单子项在选项菜单中的排列顺序示例二设置菜单的图标public MenuItem setIcon(int iconRes)示例的实现结果菜单多余六个菜单时显示扩展菜单不能够显示图标支持单选框和复选框public void setGroupCheckable(int group, boolean checkable, boolean exclusive);在setGroupCheckable()方法中,第一个参数为要设置的groupId,第二个为菜单项是否可选,最后一个参数是是否为单选切换单复选的选择效果需要在onOptionsItemSelected中设置onPrepareOptionsMenu()函数,能够动态的添加、删除菜单子项,或修改菜单的标题、图标和可见性等内容,函数的返回值的含义与onCreateOptionsMenu()函数相同当用户第一次按Menu键时,先执行onCreateOptionsMenu( ),然后执行onPrepareOptionsMenu();当用户第二次,第三次,第N次按Menu建时,执行onPrepareOptionsMenu(),因此我们可以在onPrepareOptionsMenu()中处理每次的变化1.2子菜单子菜单就是将相同功能的分组进行多级显示的一种菜单子菜单是能够显示更加详细信息的菜单子项菜单子项使用了浮动窗体的显示形式,能够更好适应小屏幕的显示方式子菜单不支持嵌套创建一个子菜单的步骤● 覆盖Activity 的onCreateOptionsMenu()方法,调用Menu 的addSubMenu()方法来添加子菜单● 调用SubMenu 的add()方法,添加子菜单● 覆盖onContextItemSelected()方法,响应子菜单的单击事件 示例SubMenu 是Menu 的子类 比较常用的方法有:setHeaderIcon()、setHeaderTitle()设置关联Intent打开另一个Activitypublic MenuItem setIntent(Intent intent)示例的实现结果如图练习——菜单应用需求说明:按图创建菜单每个菜单都有子菜单性别子菜单使用单选颜色子菜单使用复选启动程序子菜单需要使用关联Intent1.3快捷菜单快捷菜单也可称为上下文菜单,同样采用了动态窗体的显示方式,与子菜单的实现方式相同,但两种菜单的启动方式却截然不同快捷菜单类似于普通桌面程序中的“右键菜单”,当用户点击界面元素超过2秒后,将启动注册到该界面元素的快捷菜单创建一个快捷菜单的步骤覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项覆盖onContexItemSelected()方法,响应菜单单击事件调用registerForContexMenu()方法为视力注册上下文菜单示例示例的实现结果如图onCreateContextMenu函数public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo)●menu:需要显示的快捷菜单●v:V是用户选择的界面元素●menuInfo:menuInfo是所选择界面元素的额外信息onCreateOptionsMenu函数仅在第一次使用菜单时被调用一次,而onCreateContextMenu函数在每次启动都将会被调用一次1.4XML菜单Android不仅支持代码创建菜单,同时还支持xml配置菜单创建一个XML菜单的步骤●在/res/目录下新建menu文件夹,用于存储Menu XML资源文件●在/res/menu/下新建menu1.xml菜单界面描述文件●重写Activity中onCreateOptionsMenu(Menu menu)方法示例创建xml文件使用Android xml向导创建选项菜单创建子菜单在<item/>标签内嵌套<menu/>创建单选子菜单、多选子菜单● 使用group 标签,设置属性android:checkableBehavior ● single 设置为单选,all 为多选,none 为普通选项练习——菜单应用需求说明:按图创建xml菜单每个菜单都有子菜单性别子菜单使用单选颜色子菜单使用复选启动程序子菜单启动关联Intent2.对话框一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能.在Android中Dialog是创建对话框的基础,我们不能直接实例化一个Dialog而是使用它的子类Android API 支持下列类型的对话框对象●警告对话框AlertDialog●进度对话框ProgressDialog●日期选择对话框DatePickerDialog●时间选择对话框TimePickerDialog2.1AlertDialog警告对话框AlertDialog主要用来提示一些文本信息●可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以是自定义的使用AlertDialog来完成下面几种任务●显示提示信息,让用户选择是或否●从Dialog中提供的列表里选择一个Item项●从Dialog中提供的列表里选择多个Item项●…创建AlertDialog的步骤⏹创建一个AlertDialog.Builder对象,该对象是AlertDialog的创建器⏹调用AlertDialog.Builder的方法,设置要创建的Dialog的参数,如图标,几个按钮,显示什么内容等⏹对按钮设置回调函数(因为android中的dialog都是异步的,所以要回调函数)⏹调用AlertDialog.Builder的create()方法,让Builder生成dialog对象⏹使用show()方法将dialog显示出来弹出一个消息框如果不进行设置。
Android中的菜单OptionsMenuContextMenu和PopupMenu
Android中的菜单OptionsMenuContextMenu和PopupMenuOptionsMenu在介绍Toolbar的时候,已经介绍了OptionsMenu的用法,OptionsMenu称为选项菜单,它可以设置在Toolbar中,显示方式有两种:直接显示在Toolbar中,显示在overflow菜单中。
显示在overflow菜单中的按钮,也可以通过手机的menu 键来调出,如果当前Activity是隐藏状态栏的,就需要使用menu键了。
需要注意的是,手机的menu键只能调出包含在overflow里的item。
这里介绍一个特殊的方法,onPrepareOptionsMenu(。
我们知道,创建OptionsMenu调用的方法是onCreateOptionsMenu,但是这个方法只会执行一次。
如果在运行过程中对OptionsMenu进行操作,比如改变ItemIcon等,这时候就要用到onPrepareOptionsMenu,这里方法中可以获取到menu对象,对菜单栏进行操作。
onPrepareOptionsMenu通过invalidateOptionsMenu(方法调用。
另外,点击overflow按钮也会调用onPrepareOptionsMenu,因为点击overflow的时候,隐藏的menu item会显示出来,也就是改变了menu的样式,所以点击overflow实际上已经调用了invalidateOptionsMenu(方法。
ContextMenuContextMenu翻译为上下文菜单,与OptionsMenu不同的是,ContextMenu是被view对象持有的,而OptionsMenu则是被Activity或者Fragment对象持有。
ContextMenu通过长按View调出。
下面是一个长按Button弹出ContextMenu的例子:1.创建menu的layout文件。
当然这一步也可以省略,在代码中CreateMenu的时候动态添加item是一样的效果。
Android 用户界面---菜单(Menus)
在很多类型的应用程序中,菜单是一个常用的用户界面组件。
要提供友好的和前后一致的用户体验,就应该使用Menu APIs把Activity的动作和其他选项展现给用户。
从Android3.0(API 级别11)开始,Android设备不再需要提供一个专用的Menu按钮,随着这种改变,Android应用程序将会从对传统的6项菜单面板的依赖中解脱出来,取而代之的是提供了一个用户展现常用用户动作的操作栏。
尽管针对一些菜单项的设计和用户体验已经改变,但是定义一组动作和选项的语意依然是基于Menu APIs的。
本指南展示了如何创建能够在Android所有版本上演示的三种基本类型的菜单和动作。
选项菜单和操作栏选项菜单(options menu)是针对Activity的主要菜单集合。
它是你放置应用程序中有全局影响的动作的地方,如“搜索”、“编写电子邮件”、和“设置”等功能。
如果你针对Android2.3或更低的版本来开发应用,那么用户要通过按Menu按钮来展现选项菜单面板。
在Android3.0或更高版本上,源于选项菜单的项目是通过操作栏(action bar)来展现的,它由屏幕上的动作项目和剩余的选项组合而成。
从Android3.0开始,Menu按钮被弃用了(有些设备根本就没有这个按钮),因此,你应该使用操作栏来提供对动作和其他选项的访问。
上下菜单和上下文动作模式一个上下文菜单是一个当用户在一个元素上执行long-click事件时才显示的浮动菜单。
它提供了影响选择内容或上下文框架的动作。
当给Android3.0和更高的版本开发应用程序时,你应该改用上下文动作模式(contextual action mode)来确保被选内容的动作。
这种模式把影响选择内容的动作项目显示在屏幕顶部的一个横条中,并允许用户选择多个项目。
弹出菜单一个弹出菜单在一个垂直列表中显示项目的列表,它靠在调用这个菜单的View对象旁边。
它对给相关指定内容提供动作的展现或给一个命令的第二部分提供选项是有好处的。
Menu
MenuAndroid提供了三种基本的menu类型。
Options menu,context menu,submenu alternative menu1、OptionsMenu是通过手机的Menu按键来调用的。
在这种菜单有两部分菜单条目。
●Icon menu这样的菜单条目集合在按下menu键后将出现在屏幕的下部,最多支持六个条目。
这是仅有的支持图标的菜单,并且他们不支持checkbox和radiobutton。
●Expanded Menu这个菜单是通过点击icon menu中的“More”按钮后弹出的一个竖向的菜单条目集合。
这个菜单的存在是由于我们在optinsMenu中填充了多余六个的icon menu,多余的菜单项就会显示在这个Expanded Menu中。
当我们在optionsMenu中添加多余六个的菜单项后expandedMenu就会自动显示出来。
Create menu当第一次打开menu的时候系统会调用activity的onCreateOptionsMenu()回调方法,然后系统就会把该方法定义好的menu给你显示出来。
所以我们就需要重载这个方法,对这个方法给定的menu对象填充你需要菜单条目。
填充菜单条目的时候你可以填充你在xml 文件中定义好的菜单资源。
或者调用add()方法。
来一个一个填充你的菜单项。
这个方法会添加一个MenuItem,并且返回最新创建的对象。
你可以使用这个返回的MenuItem去设置额外的属性,比如一个icon或者快捷键。
在这里一共有四个add方法可以使用:add(int titleRes)add(int groupId, int itemId, int order, CharSequence title)add(int groupId, int itemId, int order, int titleRes)add(CharSequence title)在这几个add方法中我么注意到了第二个和第三个add方法的第一个参数是一个itemId,这个参数必须是一个唯一的整数,在回调方法中我们可以使用这个id值唯一的标识一个菜单项。
安卓开发教程:Menu功能菜单-OptionsMenu[选项菜单]
Android中的Menu功能菜单-OptionsMenu[选项菜单]Android中的菜单是用户界面中最常见的元素,使用也很频繁,在Android中,菜单被分为3种,分别为选项菜单(OptionsMenu)、上下文菜单(ContextMenu)、子菜单(SubMenu)。
本文先讲选项菜单(OptionsMenu)的使用。
Android手机上有个Menu按键,当Menu按下的时候,每个Activity都可以选择处理这一请求,在屏幕底部弹出一个菜单,这个菜单我们就叫做选项菜单(OptionsMenu),一般情况下,选项菜单最多能显示2排3个菜单选项。
这些菜单项中可以设定图标,文字。
菜单项如果多于6项,从第6项开始出现一个More选项,点击More 才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。
我们先浏览下效果图(如下):我们要在Activity中除了覆盖onCreate(Bundle savedInstanceState);方法外,也要覆盖onCreateOptionsMenu(Menu menu)和onOptionsItemSelected(MenuItem item)方法。
代码如下:Java代码1.viewplaincopytoclipboardprint?2.packagecom.andy.test;3.4.importandroid.app.Activity;5.importandroid.os.Bundle;6.importandroid.view.Menu;7.importandroid.view.MenuItem;8.importandroid.widget.Toast;9.10.publicclassTestActivityextendsActivity{11.12.//定义Menu菜单选项的ItemId13.finalstaticintONE=Menu.FIRST;14.finalstaticintTWO=Menu.FIRST+1;15.finalstaticintTHREE=Menu.FIRST+2;16.finalstaticintFOUR=Menu.FIRST+3;17.finalstaticintFIVE=Menu.FIRST+4;18.finalstaticintSIX=Menu.FIRST+5;19.finalstaticintSEVEN=Menu.FIRST+6;20.21.publicvoidonCreate(BundlesavedInstanceState){22.super.onCreate(savedInstanceState);23.setContentView(yout.main);24.}25.26.//创建Menu菜单27.publicbooleanonCreateOptionsMenu(Menumenu){28.menu.add(0,ONE,0,"第一").setIcon(R.drawable.icon);//设置文字与图标29.menu.add(0,TWO,0,"第二");30.menu.add(0,THREE,0,"第三");31.menu.add(0,FOUR,0,"第四");32.menu.add(0,FIVE,0,"第五");33.menu.add(0,SIX,0,"第六");34.menu.add(0,SEVEN,0,"第七");35.returnsuper.onCreateOptionsMenu(menu);36.}37.38.//点击Menu菜单选项响应事件39.publicbooleanonOptionsItemSelected(MenuItemitem){40.switch(item.getItemId()){41.case1:42.Toast.makeText(this,"你点击了第一",Toast.LENGTH_SHORT).show();43.break;44.case2:45.Toast.makeText(this,"你点击了第二",Toast.LENGTH_SHORT).show();46.break;47.}48.returnsuper.onOptionsItemSelected(item);49.}50.51.//选项菜单被关闭事件,菜单被关闭有三种情形,menu按钮被再次点击、52.//back按钮被点击或者用户选择了某一个菜单项53.publicvoidonOptionsMenuClosed(Menumenu){54.Toast.makeText(this,"你关闭了选项菜单",Toast.LENGTH_SHORT).show();55.}56.57.//菜单被显示之前的事件58.publicbooleanonPrepareOptionsMenu(Menumenu){59.Toast.makeText(this,60."选项菜单显示之前onPrepareOptionsMenu方法会被调用",Toast.LENGTH_LONG).show();61.//如果返回false,此方法就把用户点击menu的动作给消费了,62.//onCreateOptionsMenu方法将不会被调用63.returntrue;64.}65.}。
Android菜单详解(一)——理解android中的Menu
Android菜单详解(一)——理解android中的Menu今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享。
PS:强烈推荐《Pro Android 3》,是我至今为止看到的最好的一本android书,中文版出到《精通Android 2》。
菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机甚至都要有一个"Menu"键,由此可见菜单在Android程序中的特殊性。
Android SDK提供的菜单有如下几种:1.选项菜单:最常规的菜单,android中把它叫做option menu2.子菜单:android中点击子菜单将弹出悬浮窗口显示子菜单项。
子菜单不支持嵌套,即子菜单中不能再包括其他子菜单。
3.上下文菜单:android中长按视图控件后出现的菜单,windows点击右键弹出的菜单即上下文菜单4.图标菜单:这个比较简单,就是带icon的菜单项,需要注意的是子菜单项、上下文菜单项、扩展菜单项均无法显示图标。
5.选择菜单(alternative menu):用的比较少,以后单独介绍,本文先跳过(其实是我还没弄明白啦o(≧v≦)o~~)6.扩展菜单:选项菜单最多只能显示6个菜单项,超过6个时,第6个菜单项会被系统替换为一个叫“更多”的子菜单,原来显示不下的菜单项都作为“更多”菜单的子菜单项。
如下图:第6个菜单项自动变为“更多”点击“更多”显示其他菜单项Android3.0又引入了一个叫action bar的东西,本文不做讲解,大家自己google。
android.view.Menu接口代表一个菜单,android用它来管理各种菜单项。
注意我们一般不自己创建menu,因为每个Activity默认都自带了一个,我们要做的是为它加菜单项和响应菜单项的点击事件。
android.view.MenuItem代表每个菜单项,android.view.SubMenu代表子菜单。
Android应用添加设置菜单
给Android应用添加一个设置菜单用户按下menu按钮后, 弹出一个菜单, 可以设置例如背景音乐, 或者显示提示等功能选项.(1) 需要几个要用到的stringres/values/strings.xml<string name="setting_label">Settings...</string><string name="setting_title">Game Settings</string><string name="setting_shortcut">s</string><string name="music_title">Music</string><string name="music_summary">Play background music</string><string name="hints_title">Hints</string><string name="hints_summary">Show hints during play</string>(2) 定义菜单, 需要建立新的文件res/menu/menu.xml<?xml version="1.0" encoding="utf-8"?><menu xmlns:Android = "/apk/res/android"><itemAndroid:id="@+id/settings"Android:title="@string/settings_label"Android:alphabeticShortcut="@string/settings_shortcut" /></menu>解释: alphabeticShortcut = "s" 意思是快捷键为键盘的"s"(3) 在需要添加menu的Activity中重写onCreateOptionsMenu() 方法:@overridepublic boolean onCreateOptionsMenu(Menu menu){super.onCreateOptionsMenu(menu);MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.menu, menu);return true;}解读代码: 首先, MenuInflater获取方法只有一种: Activity.getMenuInflater(), 其次, MenuInflater.inflater(int menuRes,Menu menu)的返回值是void型(这里不代表inflater就是static方法, 可以这样调用, 只是为了描述方便), 这就决定了MenuInflater.inflater后就没有后续操作了. 这说明通过这种方式把Menu布局文件写好后就不能在程序中动态修改了, 而不像LayoutInflater.inflater那样, 返回值是View型, 可以进行后续的进一步操作. 另外, MenuInflater只有一个void inflater(int menuRes,Menu menu)非构造方法.getMenuInflater() 方法返回一个MenuInflater类的实例, 用于从xml文件中读取菜单定义, 并将其转换为实际的视图.用户选择任何菜单项时, 将会调用onCreateOptionsItemSelected()方法, 该方法的定义如下:@Overridepublic boolean onCreateOptionsItemSelected(MenuItem item){switch(item.getItemId()){case R.id.settings:startActivy(new Intent(this, Settings.class));return true;}return flase;}Settings是一个类, 后面给出! 用来显示所有用户首选项并允许用户修改这些首选项的值.(4) 添加设置, 新建一个xml文件res/xml/settings.xml<?xml version="1.0" encoding="utf-8"?><PreferenceScreenxmlns:Android="/apk/res/android"><CheckBoxPreferenceAndroid:key="music"Android:title="@string/music_title"Android:summary="@string/music_summary"Android:defaultValue="true" /><CheckBoxPreferenceAndroid:key="music"Android:title="@string/music_title"Android:summary="@string/music_summary"Android:defaultValue="true" /></PreferenceScreen>创建两个checkbox 并设置初始状态为开启, 因为这两个首选项的键值都是字符串常量, 将被存储在Android 的首选项数据库中.(5) 创建并定义Settings类, 继承PreferenceActivity类:public class Settings extends PreferenceActivity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);addPreferecesFromResource(R.xml.settings);}}addPreferecesFromResource() 方法从xml文件中读取设置定义, 并将其解压缩到当前的活动视窗中, 所有耗时的解压缩都在PreferenceActivity类中处理.(6) 注册Setting活动就完成了整个例子。
Android中上下文菜单选项--ContextMenu
为了创建一个上下文菜单,你必须重写这个活动的上下文菜单回调函数:onCreateContextMenu()和 onContextItemSelected()。在回调函数onCreateContextMenu()里,你可以通过使用一个add()方法来添加菜单项,或者通过扩充一个定义在XML中的菜单资源。然后,通过registerForContextMenu()为这个视图注册一个上下文菜单ContextMenu.
[4] com.andyidea.menudemo包下的 MenuActivity.java 源码如下:
package com.andyidea.menudemo;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;public class MenuActivity extends Activity { ListView lv; private ArrayAdapter<String> adapter; private List<String> alist = new ArrayList<String>(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(yout.main); lv = (ListView)findViewById(R.id.lv); alist.add("第一"); alist.add("第二"); alist.add("第三"); adapter = new ArrayAdapter<String>(this,yout.simple_expandable_list_item_1,alist); lv.setAdapter(adapter); //注册视图对象,即为ListView控件注册上下文菜单 registerForContextMenu(lv); } /** * 创建上下文菜单选项 */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { //1.通过手动添加来配置上下文菜单选项 //menu.add(0, 1, 0, "修改"); //menu.add(0, 2, 0, "删除"); //2.通过xml文件来配置上下文菜单选项 MenuInflater mInflater = getMenuInflater(); mInflater.inflate(R.menu.cmenu, menu); super.onCreateContextMenu(menu, v, menuInfo); } /** * 当菜单某个选项被点击时调用该方法 */ @Override public boolean onContextItemSelected(MenuItem item) { switch(item.getItemId()){ case 1: Toast.makeText(this, "你选择了手动修改", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(this, "你选择了手动删除", Toast.LENGTH_SHORT).show(); break; case R.id.add: Toast.makeText(this, "你选择了XML增加", Toast.LENGTH_SHORT).show(); break; case R.id.update: Toast.makeText(this, "你选择了XML更新", Toast.LENGTH_SHORT).show(); break; case R.id.delete: Toast.makeText(this, "你选择了XML删除", Toast.LENGTH_SHORT).show(); break; } return super.onContextItemSelected(item); } /** * 当上下文菜单关闭时调用的方法 */ @Override public void onContextMenuClosed(Menu menu) { // TODO Auto-generated method stub super.onContextMenuClosed(menu); } }
Androidstudio菜单(Menu)
Androidstudio菜单(Menu)1.OptionMenu(选项菜单)1)如何使⽤OptionMenu?答:⾮常简单,重写两个⽅法就好,其实这两个⽅法我们在创建项⽬的时候就会⾃动⽣成~ 他们分别是:public boolean onCreateOptionsMenu(Menu menu):调⽤OptionMenu,在这⾥完成菜单初始化public boolean onOptionsItemSelected(MenuItem item):菜单项被选中时触发,这⾥完成事件处理当然除了上⾯这两个⽅法我们可以重写外我们还可以重写这三个⽅法:public void onOptionsMenuClosed(Menu menu):菜单关闭会调⽤该⽅法public boolean onPrepareOptionsMenu(Menu menu):选项菜单显⽰前会调⽤该⽅法,可在这⾥进⾏菜单的调整(动态加载菜单列表)public boolean onMenuOpened(int featureId, Menu menu):选项菜单打开以后会调⽤这个⽅法⽽加载菜单的⽅式有两种,⼀种是直接通过编写菜单XML⽂件,然后调⽤: getMenuInflater().inflate(R.menu.menu_main, menu);加载菜单或者通过代码动态添加,onCreateOptionsMenu的参数menu,调⽤add⽅法添加菜单,add(菜单项的组号,ID,排序号,标题),另外如果排序号是按添加顺序排序的话都填0即可!2)使⽤⽰例:代码实现:MainActivity.java:public class MainActivity extends AppCompatActivity {//1.定义不同颜⾊的菜单项的标识:final private int RED = 110;final private int GREEN = 111;final private int BLUE = 112;final private int YELLOW = 113;final private int GRAY= 114;final private int CYAN= 115;final private int BLACK= 116;private TextView tv_test;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);tv_test = (TextView) findViewById(_test);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.menu.add(1,RED,4,"红⾊");menu.add(1,GREEN,2,"绿⾊");menu.add(1,BLUE,3,"蓝⾊");menu.add(1,YELLOW,1,"黄⾊");menu.add(1,GRAY,5,"灰⾊");menu.add(1,CYAN,6,"蓝绿⾊");menu.add(1,BLACK,7,"⿊⾊");return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();switch (id){case RED:tv_test.setTextColor(Color.RED);break;case GREEN:tv_test.setTextColor(Color.GREEN);break;case BLUE:tv_test.setTextColor(Color.BLUE);break;case YELLOW:tv_test.setTextColor(Color.YELLOW);break;case GRAY:tv_test.setTextColor(Color.GRAY);break;case CYAN:tv_test.setTextColor(Color.CYAN);break;case BLACK:tv_test.setTextColor(Color.BLACK);break;}return super.onOptionsItemSelected(item);}}代码分析:上述的代码⾮常简单,给⼤家演⽰了Android 5.0的中OptionMenu(选项菜单)中动态添加菜单,以及事件处理,根据id判断⽤户点击的是哪⼀项,然后执⾏对应的操作!另外,有⼀点要注意的是,选项菜单经过了三个阶段的过渡:在Android 2.3.x或者更低版本,因为该阶段⼤部分的机型都是带有Menu键的,此阶段通过点击Menu键弹出菜单:另外通过XML⽅式定义Menu的⽅式,我们贴个简单的参考代码:<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="/apk/res/android"><item android:id="@+id/new_game"android:icon="@drawable/ic_new_game"android:title="@string/new_game"android:showAsAction="ifRoom"/><item android:id="@+id/help"android:icon="@drawable/ic_help"android:title="@string/help"/></menu>2.ContextMenu(上下⽂菜单)1)如何使⽤ContextMenu?答:使⽤的流程如下:Step 1:重写onCreateContextMenu()⽅法Step 2:为view组件注册上下⽂菜单,使⽤registerForContextMenu()⽅法,参数是ViewStep 3:重写onContextItemSelected()⽅法为菜单项指定事件监听器上⾯的OptionMenu我们使⽤了Java代码的⽅法来完成菜单项的添加,这⾥我们就⽤XML⽂件的⽅式来⽣成我们的CotnextMenu吧,另外关于使⽤Java代码来⽣成菜单还是使⽤XML来⽣成菜单,建议使⽤后者来定义菜单,这样可以减少Java代码的代码臃肿,⽽且不⽤每次都⽤代码分配 id,只需修改XML⽂件即可修改菜单的内容,这样在⼀定程度上位程序提供的了更好的解耦,低耦合,⾼内聚,是吧~2)使⽤⽰例:实现代码:我们先来编写选项菜单的菜单XML⽂件:menu_context.xml:<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="/apk/res/android"><!-- 定义⼀组单选按钮 --><!-- checkableBehavior的可选值由三个:single设置为单选,all为多选,none为普通选项 --><group android:checkableBehavior="none"><item android:id="@+id/blue" android:title="@string/font_blue"/><item android:id="@+id/green" android:title="@string/font_green"/><item android:id="@+id/red" android:title="@string/font_red"/></group></menu>接着我们在选项菜单的那个基础上,添加⼀个TextView,然后加上下⾯⼀些东西:private TextView tv_context;tv_context = (TextView) findViewById(_context);registerForContextMenu(tv_context);//重写与ContextMenu相关⽅法@Override//重写上下⽂菜单的创建⽅法public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {MenuInflater inflator = new MenuInflater(this);inflator.inflate(R.menu.menu_context, menu);super.onCreateContextMenu(menu, v, menuInfo);}//上下⽂菜单被点击是触发该⽅法@Overridepublic boolean onContextItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.blue:tv_context.setTextColor(Color.BLUE);break;case R.id.green:tv_context.setTextColor(Color.GREEN);break;case R.id.red:tv_context.setTextColor(Color.RED);break;}return true;}3.SubMenu(⼦菜单)所谓的⼦菜单只是在<**item**>中⼜嵌套了⼀层<**menu**>⽽已代码⽰例:实现代码:编写⼦菜单的Menu⽂件:menu_sub.xml:<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="/apk/res/android"><item android:id="@+id/submenu" android:title="⼦菜单使⽤演⽰~"><menu><group android:checkableBehavior = "none"><item android:id="@+id/one" android:title = "⼦菜单⼀"/><item android:id="@+id/two" android:title = "⼦菜单⼆"/><item android:id="@+id/three" android:title = "⼦菜单三"/></group></menu></item></menu>接着我们改下上⾯上下⽂菜单的两个⽅法的内容,换上下⾯的代码:public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {//⼦菜单部分:MenuInflater inflator = new MenuInflater(this);inflator.inflate(R.menu.menu_sub, menu);super.onCreateContextMenu(menu, v, menuInfo);}public boolean onContextItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.one:Toast.makeText(MainActivity.this,"你点击了⼦菜单⼀",Toast.LENGTH_SHORT).show(); break;case R.id.two:item.setCheckable(true);Toast.makeText(MainActivity.this,"你点击了⼦菜单⼆",Toast.LENGTH_SHORT).show(); break;case R.id.three:Toast.makeText(MainActivity.this,"你点击了⼦菜单三",Toast.LENGTH_SHORT).show();item.setCheckable(true);break;}return true;}4.PopupMenu(弹出式菜单)⼀个类似于PopupWindow的东东,他可以很⽅便的在指定View下显⽰⼀个弹出菜单,⽽且他的菜单选项可以来⾃于Menu资源,下⾯我们写个简单的例⼦来使⽤下这个东东~使⽤⽰例:实现代码:菜单资源⽂件:menu_pop.xml:<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="/apk/res/android"><item android:id="@+id/lpig" android:title="⼩猪"/><item android:id="@+id/bpig" android:title="⼤猪"/></menu>在布局中添加⼀个按钮,然后添加点击事件:MainActivity.java:btn_show_menu.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {PopupMenu popup = new PopupMenu(MainActivity.this,btn_show_menu);popup.getMenuInflater().inflate(R.menu.menu_pop, popup.getMenu());popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {switch (item.getItemId()){case R.id.lpig:Toast.makeText(MainActivity.this,"你点了⼩猪~",Toast.LENGTH_SHORT).show();break;case R.id.bpig:Toast.makeText(MainActivity.this,"你点了⼤猪~",Toast.LENGTH_SHORT).show();break;}return true;}});popup.show();}});。
android addmenuprovider用法
android addmenuprovider用法在Android中,AddMenuProvider是一个接口,用于提供动态添加菜单项的功能。
要使用AddMenuProvider,您需要遵循以下步骤:1. 创建一个类并实现AddMenuProvider接口。
```javapublic class MyAddMenuProvider implements AddMenuProvider {@Overridepublic void addMenuItems(Context context, MenuInflater inflater, Menu menu) {// 在此处添加菜单项}}```2. 在AndroidManifest.xml文件中声明该类作为AddMenuProvider。
```xml<application ...>...<meta-dataandroid:name="androidx.slidingpanelayout.addmenuprovider" android:value=".MyAddMenuProvider" /></application>```3. 在您的activity或fragment的onCreateOptionsMenu方法中使用AddMenuProvider。
```java@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {super.onCreateOptionsMenu(menu, inflater);// 使用AddMenuProviderAddMenuProvider provider = (AddMenuProvider) getSystemService(Context.ADD_MENU_PROVIDER_SERVICE );if (provider != null) {provider.addMenuItems(getActivity(), inflater, menu);}}```通过以上步骤,您可以在运行时动态地从AddMenuProvider添加菜单项。
AndroidonCreateOptionsMenu的使用方法总结
AndroidonCreateOptionsMenu的使⽤⽅法总结Android onCreateOptionsMenu的使⽤⽅法总结任何⼀款软件都少不了对“菜单”的使⽤。
在Android下,每⼀个activity都捆绑了⼀个Menu,要想定义和使⽤菜单,都必须在Activity下进⾏操作,复写onCreateOptionsMenu 和 onOptionsItemSelected这两个⽅法。
举例如下:@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//调⽤基类的⽅法,以便调出系统菜单(如果有的话)super.onCreateOptionsMenu(menu);menu.add(0, 1, 0, "重新开始").setIcon(R.drawable.refresh);menu.add(0, 2, 0, "游戏指南").setIcon(R.drawable.help);menu.add(0, 3, 0, "关于游戏").setIcon();menu.add(0, 4, 0, "不想玩了").setIcon(R.drawable.exit);//返回值为”true”,表⽰菜单可见,即显⽰菜单return true;}看⼀看menu.add的⽅法中的参数:第⼀个int类型的group ID参数,代表的是组概念,你可以将⼏个菜单项归为⼀组,以便更好的以组的⽅式管理你的菜单按钮。
可以⽤到的⽅法有:removeGroup(id)setGroupCheckable(id, checkable, exclusive)setGroupEnabled(id,boolean enabled)setGroupVisible(id,visible)个⼈认为,当你需要在不同场合下显⽰不同的menu的时候,合理使⽤这个参数将更为有效的处理菜单的显⽰。