android MENU自定义开发
1、首先新建一个android项目,名字叫做MenuSelfShow,其余的参数,用户可以自己设置,点击完成,即可生成项目信息。


2、定义menuself.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="新建" android:icon="@drawable/icon" android:id="@+id/newinfo">
<menu>
<group android:id="@+id/new_group"
android:checkableBehavior="none">
<item android:id="@+id/newFile" android:title="新建文件"/>
<item android:id="@+id/newDoc" android:title="新建文档"/>
<item android:id="@+id/newList" android:title="新建列表"/>
</group>
</menu>
</item>
<item android:title="查看" android:icon="@drawable/icon" android:id="@+id/view">
<menu>
<group android:id="@+id/view_group" android:checkableBehavior="single">
<item android:id="@+id/viewinfo" android:title="信息" android:checked="true"/>
<item android:id="@+id/info" android:title="详情" />
</group>
</menu>
</item>
<item android:title="删除" android:icon="@drawable/icon" android:id="@+id/delete">
<menu>
<group android:id="@+id/delete_group">
<item android:id="@+id/deleteone" android:title="删除详情" />
<item android:id="@+id/deletelist" android:title="删除列表" />
</group>
</menu>
</item>
</menu>
Menu 资源文件的定义
Menu 资源文件也是一个XML文件,该文件存放于工程的res\menu\menu.xml 目录下。通过R.menu.menu的方式来引用。
Menu 资源文件的结构:
1、<menu>根元素,在<menu>根元素里面会嵌套<item>和<group>子元素,<menu>根元素没有属性。
2、<item>元素中也可嵌套<menu>形成子菜单。
3、<group>表示一个菜单组,相同的菜单组可以一起设置其属性,例如visible、enabled和checkable等。<group>元素的属性说明如下:
— id:唯一标示该菜单组的引用id。
— menuCategory:对菜单进行分类,定义菜单的优先级,有效值为container、system、secondary和alternative。
— orderInCategory:一个分类排序整数。
— checkableBehavior:选择行为,单选、多选还是其他。有效值为none、all和single。
— visible:是否可见,true或者false。
— enabled:是否可用,true或者false。
<item>表示菜单项,包含在<menu>或<group>中的有效属性。<item>元素的属性说明如下。
— id:唯一标示菜单的ID引用。
— menuCategory:菜单分类。
— orderInCategory:分类排序。
— title:菜单标题字符串。
— titleCondensed:浓缩标题,适合标题太长的时候使用。
— icon:菜单的图标。
— alphabeticShortcut:字符快捷键。
— numericShortcut:数字快捷键。
— checkable:是否可选。
— checked:是否已经被选。
— visible:是否可见。
— enabled:是否可用。

3、对于MENU而言,MENU的初始化流程
菜单初始化:onCreateOptionsMenu(Menu menu)
菜单被选中:onOptionsItemSelected(MenuItem item)
菜单关闭: onOptionsMenuClosed(Menu menu)
选项菜单显示之前:onPrepareOptionsMenu(Menu menu)
打开菜单后的动作: onMenuOpened(int featureId, Menu menu)
在实例中,复写onCreateOptionsMenu(Menu menu)生成菜单,调用自定义的MENU样式。
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.layout.menuself, menu);//调用自定义MENU样式
return super.onCreateOptionsMenu(menu);
}

4、重写public boolean onOptionsItemSelected(MenuItem item),菜单选项被选中触发的事件
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId()){
case R.id.delete:
Toast.makeText(MenuShow.this, ""+"删除菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.view:
Toast.makeText(MenuShow.this, ""+"查看菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.newinfo:
Toast.makeText(MenuShow.this, ""+"新建菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.viewinfo:
Toast.makeText(MenuShow.this, ""+"信息菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.info:
Toast.makeText(MenuShow.this, ""+"详情菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.newFile:
Toast.makeText(MenuShow.this, ""+"新建文件菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.newDoc:
Toast.makeText(MenuShow.this, ""+"新建文档菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.newList:
Toast.makeText(MenuShow.this, ""+"新建列表菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.deleteone:
Toast.makeText(MenuShow.this, ""+"删除详情菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.deletelist:
Toast.makeText(MenuShow.this, ""+"删除列表菜单", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}

5、程序书写完成,运行程序,可以观察程序运行结果



