Android菜单有两种:
1、 选项菜单(OptionsMenu)
在Activity里面重写onCreateOptionsMenu(Menu menu)方法,然后有两种方式可以来添加菜单
⑴、直接在代码里面添加
public boolean onCreateOptionsMenu(Menu menu) { { // 代码添加菜单项 // add(int groupId, int itemId, int order, CharSequence title) // groupId:组ID; // itemId: itemID; // order:显示顺序 // title:菜单项的标题 menu.add(0, 0, 5, "添加").setIcon(android.R.drawable.ic_menu_add); menu.add(0, 1, 4, "电话").setIcon(android.R.drawable.ic_menu_call); menu.add(0, 2, 3, "删除").setIcon(android.R.drawable.ic_menu_delete); menu.add(1, 3, 2, "编辑").setIcon(android.R.drawable.ic_menu_edit); menu.add(1, 4, 1, "日期").setIcon(android.R.drawable.ic_menu_day); menu.add(1, 5, 0, "照相机").setIcon(android.R.drawable.ic_menu_camera); }
⑴、在XML文件里面写好然后用一个菜单映射映射到函数内部
XML文件如下:
在函数内部把XML文件映射进来
@Override public boolean onCreateOptionsMenu(Menu menu) {{// xml添加菜单项 MenuInflater mif = this.getMenuInflater(); mif.inflate(R.menu.main_menu, menu); } return true; }
处理选项菜单消息
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 0: System.out.println("===代码添加的菜单项的 <菜单项1> 选中了"); break; case 1: System.out.println("===代码添加的菜单项的 <菜单项2> 选中了"); break; case 2: System.out.println("===代码添加的菜单项的 <菜单项3> 选中了"); break; } return true; } 菜单项3> 菜单项2> 菜单项1>
如果是用XML文件添加的菜单项则用ID号对消息进行处理
可以用系统菜单按钮打开菜单项,也可以自定义触发打开菜单项
openOptionsMenu();
1、 上下文菜单(ContextMenu)
创建和选项菜单一样有两种创建方式:自写和从XML文件加载
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { {// xml添加菜单项 MenuInflater mif = this.getMenuInflater(); mif.inflate(R.menu.main_menu, menu); } }
上下文菜单不能设置图标,对上下文菜单消息处理:
@Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.main_menu_item_1: System.out.println("===xml添加的菜单项的选中了"); break; case R.id.main_menu_item_2: System.out.println("===xml添加的菜单项的 选中了"); break; case R.id.main_menu_item_3: System.out.println("===xml添加的菜单项的 选中了"); break; } return true; }
上下文菜单用注册的方式来进行显示:
Button bt2 = (Button) findViewById(R.id.bt2);this.registerForContextMenu(bt2);
3.子菜单(Dialog)
触发子菜单显示的消息:
((Button) findViewById(R.id.bt1)) .setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {//根据这个ID号来判断显示的是哪一个Dialog Android_09_03Activity2.this.showDialog(1); } }); }
真正的对话框创建是在这里完成的:
@Override protected Dialog onCreateDialog(int id) { switch (id) { case 1: AlertDialog.Builder adb = new AlertDialog.Builder(this); adb.setTitle("dialog的title") // .setMessage("dialog的Message") .setNeutralButton("中间按钮", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setPositiveButton("左确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setNegativeButton("右取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) // .setView(new EditText(Android_09_03Activity2.this)) .setIcon(android.R.drawable.ic_menu_help) // .setSingleChoiceItems( // new String[] { "item1", "item2", "item3", "item4" }, // 0, null); // .setMultiChoiceItems( // new String[] { "item1", "item2", "item3", "item4" }, // null, null); .setItems( new String[] { "item1", "item2", "item3", "item4" }, null); adb.create().show(); break; case 2: break; } return null; }
如上所述,在创建对话框的时候事件响应也都添加进去了。