天天看点

Android学习笔记(34):Android菜单

android的菜单分为三种类型:选项菜单(option menu)、上下文菜单(context menu)、子菜单(sub menu)。

选项菜单(option menu):按设备上的菜单按钮(menu)会出现的菜单。不支持勾选标记。

上下文菜单(context menu):长按某个组件会出现的菜单。不支持菜单项图标。

子菜单(submenu):就是子菜单。不支持菜单项图标,不支持嵌套子菜单。

menu类用于添加菜单项和子菜单的方法是add()和addsubmenu():

menuitem add(charsequence title):添加一个菜单项

menuitem add(int groupid, int itemid, int order, int titleres):添加一个处于groudid组的菜单项

menuitem add(int titleres):添加一个菜单项

menuitem add(int groupid, int itemid, int order, charsequence title):添加一个处于groudid组的菜单项

submenu addsubmenu(int groupid, int itemid, int order, charsequence title):添加一个处于groudid组的子菜单

submenu addsubmenu(int groupid, int itemid, int order, int titleres):添加一个处于groudid组的子菜单

submenu addsubmenu(charsequence title):添加一个子菜单

submenu addsubmenu(int titleres):添加一个子菜单

(1)选项菜单的创建方法:

1、重写activity的oncreateoptionsmenu(menu menu)方法。

2、调用menu的add()方法添加菜单项(menuitem),可以调用menuitem的seticon()方法为菜单项设置图标。

3、重写acitivy的onoptionsmenuselected()方法为菜单设置事件监听。

(2)子菜单的创建方法:

1、重写activity的oncreateoptionsmenu()方法,调用menu的addsubmenu()方法添加子菜单。

2、调用submenu的add()方法,添加子菜单项。

3、重写oncreateitemselected()方法,为菜单设置监听事件。

submenu类还提供了额外的方法来设置菜单头的信息:

submenu setheadericon(drawable icon):设置菜单头的图标。

submenu setheadericon(int iconres):设置菜单头的图标。

submenu setheadertitle(charsequence title):设置菜单头的标题。

submenu setheadertitle(int titleres):设置菜单头的标题。

submenu setheaderview(view view):使用view组件设置菜单头。

(3)上下文菜单的创建方法:

1、重写activity的oncreatecontextmenu(contextmenu, view, contextmenu.contextmenuinfo)方法,view参数设置的是触发上下文菜单的组件。

2、调用menu的add()方法添加菜单项menuitem

3、重写oncontextitemselected()方法,为上下文菜单设置事件监听。

4、调用registerforcontextmenu(view)方法,为view组件注册上下文菜单。

同样我们可以用setheadericon()、setheadertitle()方法为上下文菜单设置图标、标题。

(4)为菜单项设置事件监听:

我们重写activity的oncreateitemselected()方法来设置事件监听,一般我们用switch方法判断是哪个菜单项被单击,所以我们需要为每个菜单项设置一个id,以方便判断。

当然我们还有另一个方法就,就是为每个菜单项绑定监听器,用setonmenuitemclicklistener()方法,但这样做是很麻烦的,不推荐。

(5)设置单选菜单项和多选菜单项:

setcheckable(boolean checkable):设置该菜单项可否被勾选。

setgroupcheckable(int group,boolean checkable,boolean exclusive):设置group组的菜单项是否可以被勾选,如果exclu设置为true,那么该组为单选菜单项。

(6)为菜单项设置快捷键(现在好像没什么用了):

setalphabeticshortcut(char alphachar):设置字母快捷键。

setnumericshortcut(char numericchar):设置数字快捷键。

setshortcut(char numericchar, char alphachar):同时设置两种快捷键。

(7)设置与activity关联的菜单项:

用于单击某个菜单项时可以跳转到其他activity。

用setintent(intent intent)方法。

(8)使用xml文件创建菜单:

创建方法是

1.在res文件下面的menu文件目录下创建菜单的xml文件。

2.在activity的oncreateoptionsmenu()方法或oncreatecontextmenu()方法中用inflate(int menures, menu menu)方法加载对应资源。

3.重写activity相关的事件监听方法。

menu文件夹下的xml有如下的规则:

1.根元素是<menu.../>,没有多余的属性。

2.<group.../>将多个菜单项<item.../>包装成一个菜单组。

可以设置如下属性:

checkablebehavior:菜单项额选择行为,none(不可选)、all(多选)、single(单选)。

menucategory:指定菜单项的优先级,container、system、secondary和alternative。

visible:是否可见

enable:是否可用

3.<item.../>用于定义菜单项,内部可包含<menu.../>,就成了子菜单。

可以设置的属性如下:

android:id:设置id

android:title:设置标题

android:icon:设置图标

android:alphabeticshortcut:设置字母快捷键

android:numbericshortcut:设置数字快捷键

android:checkable:是否可选

android:checked:是否选中

android:visible:是否可见

android:enable:是否可用

(9)弹出式菜单popupmenu

创建步骤如下:

1、new popupmenu(context context,view anchor)创建弹出式菜单,anchor参数表示触发菜单的组件。

2、调用menuinflater的inflate()方法加载菜单资源。

3、调用popupmenu的show()方法显示弹出式菜单。

继续阅读