菜单创建的两种方式:


1、在xml文件中创建菜单:


具体代码:

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

xmlns:tools="http://schemas.android.com/tools"

tools:context="com.xunfang.menucreate.MainActivity" >

//此处创建子菜单

<item

android:id="@+id/sms"

android:icon="@drawable/sms"

android:orderInCategory="100"

android:showAsAction="never"

android:title="短信">

<menu>

<item

android:id="@+id/smsfamily"

android:icon="@drawable/smsalt"

android:orderInCategory="100"

android:showAsAction="never"

android:title="家庭短信"/>

<item

android:id="@+id/smscompany"

android:icon="@drawable/twitteralt"

android:orderInCategory="100"

android:showAsAction="never"

android:title="公司短信"/>

</menu>

</item>

<item

android:id="@+id/camera"

android:icon="@drawable/camera"

android:orderInCategory="100"

android:showAsAction="never"

android:title="照相机"/>

</menu>

这种情况下创建菜单时,需要用到item标签,创建一个菜单选项,就必须用到一个item

当需要创建子菜单的时候:如有背景色的部分那样,在主菜单下创建子菜单,需要在item中嵌套一个menu标签,然后在menu标签中写子菜单,每一个子菜单还是要写在item标签中。


2、动态创建菜单:

public boolean onCreateOptionsMenu(Menu menu) {

//给文件创建子菜单

SubMenu sub = menu.addSubMenu(Menu.FIRST, 1, 1, "文件") ;

sub.add(Menu.FIRST+3, 10, 1, "隐藏组3") ;

sub.add(Menu.FIRST+3, 11, 2, "显示组3") ;

menu.add(Menu.FIRST,2,2,"编辑") ;

sub.setIcon(R.drawable.browser) ;

sub.setHeaderIcon(R.drawable.browser) ;

MenuItem refactor = menu.add(Menu.FIRST + 1,3,10,"重构") ;

refactor.setIcon(R.drawable.clock) ;

MenuItem source = menu.add(Menu.FIRST + 1,4,6,"源码") ;

source.setIcon(R.drawable.sms) ;

menu.add(Menu.FIRST + 2 ,5,5,"导航") ;

menu.add(Menu.FIRST + 2,6,3,"搜索") ;

return true;

}

上面add()方法中的四个参数分别为:第一个参数表示处于同一个组中

第二个参数表示一个唯一的id

第三个参数是一个id,表示在菜单中菜单项显示的顺序

第四个参数表示显示的文本


注:给菜单项添加图标:


private void setIconVisible(Menu menu) {


try {

Class clazz = Class

.forName("com.android.internal.view.menu.MenuBuilder");

Method m = clazz.getDeclaredMethod("setOptionalIconsVisible",

boolean.class);

m.setAccessible(true);

m.invoke(menu, true);

} catch (Exception e) {

e.printStackTrace();

}

}

有背景的部分为代码关键部分,上面这个方法是我自己添加的一个方法,在添加图标的时候只需要调用这个方法就行了。