菜单和对话框

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 version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/main_menu_item_1"
        android:icon="@android:drawable/ic_menu_save"
        android:title="保存"/>

    <item
        android:id="@+id/main_menu_item_2"
        android:icon="@android:drawable/ic_menu_send"
        android:title="发送"/>

    <item
        android:id="@+id/main_menu_item_3"
        android:icon="@android:drawable/ic_menu_search"
        android:title="查找"/>

    <item
        android:id="@+id/main_menu_item_4"
        android:icon="@android:drawable/ic_menu_rotate"
        android:title="旋转"/>
设置多选
    <group android:checkableBehavior="all" >

        <item
            android:id="@+id/main_menu_item_5"
            android:icon="@android:drawable/ic_menu_more"
            android:title="更多1"/>

        <item
            android:id="@+id/main_menu_item_5"
            android:icon="@android:drawable/ic_menu_more"
            android:title="更多2"/>

        <item
            android:id="@+id/main_menu_item_5"
            android:icon="@android:drawable/ic_menu_more"
            android:title="更多3"/>

        <item
            android:id="@+id/main_menu_item_5"
            android:icon="@android:drawable/ic_menu_more"
            android:title="更多4"/>
    </group>

</menu>

 

在函数内部把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;
	}

 

如果是用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添加的菜单项的<xmlMenuTitle1>选中了");
			break;
		case R.id.main_menu_item_2:
			System.out.println("===xml添加的菜单项的<xmlMenuTitle2>选中了");
			break;
		case R.id.main_menu_item_3:
			System.out.println("===xml添加的菜单项的<xmlMenuTitle3>选中了");
			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;
	}	

 

如上所述,在创建对话框的时候事件响应也都添加进去了。

posted @ 2012-09-03 18:20  乌托邦.  阅读(438)  评论(0编辑  收藏  举报