四.menu下定义菜单

格式:<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">    <item android:id="@[+][package:]id/resource_name"          android:title="string"          android:titleCondensed="string"          android:icon="@[package:]drawable/drawable_resource_name"          android:onClick="method name"          android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]          android:actionLayout="@[package:]layout/layout_resource_name"          android:actionViewClass="class name"          android:actionProviderClass="class name"          android:alphabeticShortcut="string"          android:numericShortcut="string"          android:checkable=["true" | "false"]          android:visible=["true" | "false"]          android:enabled=["true" | "false"]          android:menuCategory=["container" | "system" | "secondary" | "alternative"]          android:orderInCategory="integer" />    <group android:id="@[+][package:]id/resource name"           android:checkableBehavior=["none" | "all" | "single"]           android:visible=["true" | "false"]           android:enabled=["true" | "false"]           android:menuCategory=["container" | "system" | "secondary" | "alternative"]           android:orderInCategory="integer" >        <item />    </group>    <item >        <menu>          <item />        </menu>    </item></menu>

属性:menu:根属性,包含item和group

item:必须是menu或者group的子元素,可以包含menu(子菜单)

group:必须是menu的子元素,包含item

属性详解:

menu:xmlns:android="http://schemas.android.com/apk/res/android"

item:

<item        android:id="@+id/item1"        android:alphabeticShortcut="m"        android:checkable=""是否能被选中        android:checked=""是否是默认选中的        android:enabled=""是否可用        android:icon=""图标        android:menuCategory="container"菜单分类        android:numericShortcut=""数字快捷键        android:orderInCategory=""在分类中顺序        android:title="root(m)"标题        android:titleCondensed="mm"简化标题        android:visible=""/>是否可见

说明:其中menuCategory分为:

container For groups that are part of a container.

system For groups that are provided by the system.

secondary For groups that are user-supplied secondary (infrequently used) options.

alternative For groups that are alternative actions on the data that is currently displayed.

group:android:checkableBehavior子类项的选择方式

none Not checkable

all All items can be checked (use checkboxes)

single Only one item can be checked (use radio buttons

详解介绍:

1.选项菜单(option menu),当用户按下menu键或者调用openOptionsMenu()打开,第一次打开会依次回调:public booleanonCreateOptionsMenu(Menu menu)和public booleanonPrepareOptionsMenu(Menu menu

,以后每次打开只会回调:public booleanonPrepareOptionsMenu(Menu menu).返回键或者调用public voidcloseOptionsMenu()会关闭menu.会回调事件:public voidonOptionsMenuClosed(Menu menu)

所以一般在onCreateOptionsMenu(Menu menu)中初始化:

@Override public boolean onCreateOptionsMenu(Menu menu) {     super.onCreateOptionsMenu(menu);     //通过MenuInflater将XML 实例化为 Menu Object     MenuInflater inflater = getMenuInflater();     inflater.inflate(R.menu.menu, menu);     return true; }

boolean onPrepareOptionsMenu(Menu menu)
·这个方法将已经创建的 Menu 实例作为参数传递,这样的话就可以移除、添加、修改菜单项。

·Android 2.3及其之前的版本,系统在用户每次打开Options Men 时会调用onPrepareOptionsMenu()方法。

·Android 3.0及其之后的版本,当你要更新菜单时你必须调用 invalidateOptionsMenu()方法,因为菜单

是一直打开着的,然后系统会自动调用onPrepareOptionsMenu() 方法。

事件处理:public booleanonOptionsItemSelected(MenuItem item)

@Override public boolean onOptionsItemSelected(MenuItem item) {     switch (item.getItemId()) {         case R.id.about:             // 显示关于页             displayAboutBox();             return true;         case R.id.help:             // 显示到帮帐页             displayHelpDialog();             return true;         case R.id.settings:             // 跳转到配置页             displaySettings();             return true;         case R.id.quit:             // 退出程序             finish();             return true;         default:             //返回False交由系统正常处理菜单,返回True则由本程序处理             return false;     } }

2.上下文菜单(content menu):长时间按住view会产生,需要在某个view上注册

说明:长时间按住就会调用oncreatecontextMenu,但是也可以调用public voidopenContextMenu(View view)打开,关闭时可以调用:closeContextMenu()

定义的xml格式和选项菜单是一样的,初始化调用publicvoidonCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)

@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {    super.onCreateContextMenu(menu, v, menuInfo);    MenuInflater inflater=getMenuInflater();    inflater.inflate(R.menu.meetings_context_menu, menu);}

事件处理:onContextItemSelected

@Overridepublic boolean onContextItemSelected(MenuItem item) {    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();    switch (item.getItemId()) {        case R.id.delete_meeting:            postionOfMeetingToDelete = info.position;            showDialog(CONFIRM_DELETE_MEETING_DIALOG);            return true;        default:            return super.onContextItemSelected(item);    }}

注册菜单:registerForContextMenu和解除注册unregisterForContextMenu

关闭时所回调的事件:onContextMenuClosed

注意:ContextMenu 与 OptionsMenu 的菜单资源XML文件格式完全相同,不能显示icon,但是ContextMenu可以具有自己的标题栏;

·通过setHeaderIcon、setHeaderTitle、setHeaderView、clearHeader方法控制标题栏的显示。

·ContextMenu 继承自 Menu ,标题栏相关的方式是扩展的方法。

多个 View 可以同时注册同一个 ContextMenu

有些 View 会自带系统的 ContextMenu,比如 EditText 会自带“输入法”“复制”“粘贴”等菜单项,

再对这些 View 注册 ContextMenu 时,会将系统菜单项和自己注册的菜单项融合到一起

3.sub menu(子菜单):在定义选项菜单和上下文菜单时可以加入子菜单,当子菜单被选中时 仍然调用和父类菜单选中时一样的方法.

可以动态的通过addsubmenu和add方法添加子菜单和子菜单项

子菜单有相应的标题栏和相应的方法

其余的特性:

菜单组:可以通过menu.setGroupCheckable();

menu.setGroupEnabled();

menu.setGroupVisible()

进行同意设置

可以通过group的android:checkableBehavior属性设置组菜单项的选择模式

single
Only one item from the group can be checked (radio buttons)
all
All items can be checked (checkboxes)
none
No items are checkable

但是选择后我们要手动的改变状态,使用方法:setChecked()

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. Android中onContextItemSelected不响应
  5. Android(安卓)自定义组件 方法篇
  6. Android(安卓)MediaPlayer 常用方法介绍
  7. Android(安卓)单元测试小总结
  8. Android(安卓)Volley库源码简析(HTTP Request部分)
  9. Android中如何引入Lambda表达式

随机推荐

  1. Android触摸事件的分发、拦截、处理
  2. Android触屏测试实例代码
  3. Android如何保持屏幕常亮
  4. onRetainNonConfigurationInstance和getL
  5. android 系统关机,重启
  6. Protect Broadcast 保护广播
  7. android 中动画
  8. android 之绘图
  9. Android布局属性
  10. Android嵌套滑动