您的位置:首页 > 移动开发 > Android开发

android-----关于Menu

2015-10-14 14:24 477 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  menu contextmenu