Android支持的菜单有:
1、选项菜单(OptionsMenu)
2、上下文菜单(ContextMenu)
3、子菜单(SubMenu)
选项菜单(OptionsMenu)的用法
当一个选项菜单中还有菜单时,就要用到子菜单(SubMenu)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.main, menu);
super.onCreateOptionsMenu(menu);
menu.add(0, Menu.FIRST, 1, "现在显示按钮1").setIcon(R.drawable.ic_launcher);
menu.add(0, Menu.FIRST+1, 2, "现在显示按钮2").setIcon(R.drawable.ic_launcher);
//menu.add(0, Menu.FIRST+2, 3, "OptionsMenu3").setIcon(R.drawable.ic_launcher);
menu.add(0, Menu.FIRST+3, 4, "OptionsMenu4").setIcon(R.drawable.ic_launcher);
menu.add(0, Menu.FIRST+4, 5, "OptionsMenu5").setIcon(R.drawable.ic_launcher);
menu.add(0, Menu.FIRST+5, 6, "OptionsMenu6").setIcon(R.drawable.ic_launcher);
menu.add(0, Menu.FIRST+6, 7, "OptionsMenu7").setIcon(R.drawable.ic_launcher);
menu.add(0, Menu.FIRST+7, 8, "OptionsMenu8").setIcon(R.drawable.ic_launcher);
//向OptionsMenu3中添加子菜单
SubMenu subMenu = menu.addSubMenu(1, Menu.FIRST+2 , 3, "OptionsMenu3");
//子菜单是菜单的子类,所以增加菜单项方式一样
subMenu.add(1, 1, 3,"Sub.1");
subMenu.add(1, 2, 1,"Sub.2").setIcon(R.drawable.ic_launcher);
subMenu.add(1, 3, 2,"Sub.3");
//默认第一个显示
SubMenu subsub = subMenu.addSubMenu("subInSub");
subsub.add("sub.sub.1");
subsub.add("sub.sub.2");
/**
* true 显示
* false 不显示
*/
return true;
}
若要在菜单项中显示图片,可以用setIcon()方法。需要注意的是:我用的是android4.2.1的版本,若单单调用setIcon() 方法还是不能再菜单项中显示图片的,要显示图片需要在
清单文件中的<activity>加上:
android:theme="@android:style/Theme.Light"
经过百度,原因解释如下:
对于Android 4.0以上,系统缺省的UI风格有所变化,如果我们仍希望采用原有的显示方式,可以通过为Activity设置theme,指定风格,经过测试,Theme以及Theme.Light均可以使用旧的菜单风格,而Theme.Holo不行。
没有加上面的主题,运行结果如下:
点击OptionsMenu3进入如下:
再点击subInSub进入
若加上上面的主题后,运行效果如下:
通过比较发现,加上了上面的主题后,不仅菜单项中的图片显示了,而且若菜单项多于6个,剩下的菜单项则可以通过更多菜单项显示。并且没加主题时是以列表的形式全部显示的,加了主题后是通过表格形式显示的,但是通过更多菜单项显示的菜单并不显示图片。
上下文菜单(ContextMenu)
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(1, 1, 1, "上下文菜单1").setIcon(R.drawable.ic_launcher);
menu.add(1, 2, 3, "上下文菜单2");
menu.add(1, 3, 2, "上下文菜单3");
}
除了手动添加上下文菜单选项,同样也可以通过xml文件来添加上下文菜单选项,方式如下:
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.contextmenu_layout, menu);
contextmenu_layout.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/contextmenu1" android:title="上下文菜单1"/>
<item android:id="@+id/contextmenu2" android:title="上下文菜单2"/>
<item android:id="@+id/contextmenu3" android:title="上下文菜单3"/>
</menu>
上下文菜单通常与可视组件绑定一起使用,绑定的方法registerForContextMenu(),代码如下:
button=(Button) findViewById(R.id.button3);
registerForContextMenu(button);
长按button,运行效果如下:
通过运行效果可以看出,“上下文菜单1”中并没有显示图片。原来:
在Android支持的菜单中,只有选项菜单的菜单项可以显示图像,上下文菜单和子菜单的菜单头可以显示图像,但是菜单项不能显示图像。
相应菜单项单击事件的方法:
1、onMenuItemClick
2、onOptionsItemSelected
3、onMenuItemSelected
菜单项与Activity的关联
在菜单项中除了可以用java代码显示的打开一个activity外,还可以将activity于菜单项进行关联。代码如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem addMenuItem=menu.add(2,1,1,"菜单项");
addMenuItem.setIntent(new Intent(this,OtherActivity.class));
return true;
}