菜单操作
菜单是一种常见的应用程序与用户交互的方式,它使用类似列表的形式显示用户可以操作的功能,而用户则可以通过菜单来选择要执行的操作,应用程序也可以对用户的选择进行相关的响应。Android系统中的菜单大致分为选项菜单、子菜单、上下文菜单。
1、菜单分为两种
1)系统菜单(选项菜单)
创建系统菜单:
1、重写Activity的 onCreateOptionsMenu方法
调用menu对象的add方法添加菜单项
2、定义menu资源
重写Activity的onCreateOptionsMenu方法
根据menu资源扩充菜单
系统菜单的单击事件处理
重写Activity的 onOptionsItemSelected方法
2)上下文菜单
创建上下文菜单
为事件源对象设置OnCreateContextMenuListener监听器
上下文菜单的单击事件处理
重写Activity的 onContextItemSelected方法
注意:
如果上下文菜单事件的事件源是AdapterView对象
则,可以将上下文菜单项(MenuItem)的
getMenuInfo方法的返回值强制转换为AdapterContextMenuInfo
·选项菜单(OptionsMenu)是通过点击设备上的Menu键弹出的菜单;
- 通过res/menu下的XML文件可以配置选项菜单
- 在Activity中的onOptionsItemSelected()方法将用于选项菜单中菜单项的响应。
- 通常在配置选项菜单时,需要为每个菜单项配置如下属性:
1.id:菜单项的ID标识,用于响应菜单项时,判断当前点击的那个菜单项;
2.orderInCategory:序号,即存在多个菜单项时的排序,取值为整数,数值越小,则越靠前显示,数值越大,则越靠后显示;
3.showAsAction:将菜单项显示在ActionBar上,取值为枚举类型,包括never(从不显示在ActionBar上),always(始终显示在ActionBar上),ifRoom,withText,collapseActionView;
4.title:菜单项上显示的文字。
使用程序代码创建选项菜单
·在Activity的onCreateOptionsMenu方法中,使用参数menu即可创建菜单项。
·Menu类中定义的创建菜单项的方法:
public MenuItem add(int groupId,int itemId,int order,CharSequence title)
参数:groupId:菜单项分组
itemId:ItemId资源索引
order:菜单项的排序(数值越小越靠前)
title:显示在菜单项的文字
public MenuItem add(int groupId,int itemId,int order,int titleRes)
·子菜单(SubMenu)是选择某个菜单项后,再次弹出的下级菜单。
·选项菜单的子菜单(SubMenu)亦可通过配置文件或程序代码创建:
- 通过配置文件创建子菜单:为原有的上级菜单项的item节点添加menu子节点,并在menu子节点下再添加若干个item节点进行配置;
- 通过程序代码创建子菜单:调用Menu对象的addSubMenu()创建一般菜单项,通过返回值SubMenu对象创建子菜单。
·上下文菜单(ContextMenu)是通过长按(通常是2秒)某个空间后显示的菜单;
·通过重写Activity的OnContextMenu()方法可以初始化上下文菜单,菜单项的创建方式与在选项菜单中创建菜单项相同;
·需要调用registerForContextMenu(View view)方法将上下文菜单注册到某个控件之上;
·通过重写Activity的onContextMenuSelected()方法可以响应上下文菜单的选中事件。
示例1(系统菜单):
menu:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_file"
android:orderInCategory="1001"
android:showAsAction="never"
android:title="File">
<menu >
<item
android:id="@+id/file_new"
android:orderInCategory="1"
android:showAsAction="never"
android:title="New"/>
<item
android:id="@+id/file_close"
android:orderInCategory="2"
android:showAsAction="never"
android:title="Close"/>
</menu>
</item>
<item
android:id="@+id/