1。介绍:
从官方文档了解到,从Android3.0(API level 11)开始,Android设备不再要求提供一个专门的菜单按钮,转而推荐使用ActionBar。所以现在市面上很多新设备使用三个虚拟按键,并不再额外提供菜单按钮。
因为Android版本的发展,对于菜单的支持各个版本有很大的区别,而Android3.0是个分水岭,大概可以分为下面三类:
-
OptionMenu和ActionBar:一些操作的集合,如果开发的平台在Android3.0之上,推荐使用ActionBar,如果开发的平台在Android2.3或之下,还是可以使用OptionMenu的。
-
ContextMenu和ActionMode:ContextMenu是一个浮动的窗口形式展现一个选项列表,ActionMode是一个显示在屏幕顶部的操作栏,允许用户选择多个选项,ActionMode在Android3.0之后才有支持。
-
Popup Menu:PopupMenu是固定在View上的模态菜单,以弹出的方式显示,在Android3.0之后才有支持。
2,XML文件注入使用:
【1】创建menu 文件,创建XML文件
【2】XML文件
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings1"
android:orderInCategory="1"
android:title="aaa"/>
<item
android:id="@+id/action_settings2"
android:orderInCategory="2"
android:title="bbbb"/>
</menu>
【3】重写Activity 中onCreateOptionsMenu 加载菜单
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
}
【4】重写Activity 中onOptionsItemSelected
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action1:
Log.e("Main", "AAAAAAAAAAAAAAAAAA");
break;
case R.id.action2:
Log.e("Main", "BBBBBBBBBBBB");
break;
}
return super.onOptionsItemSelected(item);
}
3,代码注入:
【1】onCreateOptionsMenu 创建控件
//当点击手机上的menu菜单执行
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.main, menu);
//通过代码的方式添加
menu.add(0, 1, 0, "前进");
menu.add(0, 2, 0, "后退");
menu.add(0, 3, 0, "首页");
return true;
}
【2】onOptionsItemSelected //当想要知道具体菜单的哪个条目被选中 需要重写下面这个方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
System.out.println("111");
break;
case 2:
System.out.println("2222");
break;
case 3:
System.out.println("33333");
break;
}
return super.onOptionsItemSelected(item);
}
【3】onMenuOpened //当用户打开菜单的面板 这个方法就会执行
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
//[1]创建对话框
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("警告");
builder.setMessage("测试");
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
//[2]弹出对话框
builder.show();
//不要系统的样式
return false;
}