Android 之 上下文菜单、选项菜单、子菜单

菜单

OptionMenu ContextMenu SubMenu;


1、选项菜单:OptionMenu

注意:一般的选项菜单:最多可以有两行,每行3个菜单项,当多余 6 个的时候或出现more,点击显示;
创建:重写 onCreateOptionsMenu() 方法;
事件:重写onOptionsItemSelected(); 方法

2、上下文菜单:ContextMenu
说明:选项菜单服务于Activity,上下文菜单是注册到某一个View对象上;
提示:可以为ContextMenu指定标题和图标,但菜单选项不能附带图标;
创建:重写onCreateContextMenu();
事件:重写onContextItemSelected();
注册:registerForContextMenu();

3、子菜单:SubMenu
说明:子菜单不能嵌套子菜单,即android中菜单只有两层;
提示:子菜单项不支持显示图标
创建:使用addSubMenu(); 添加具有子菜单的菜单项




事例:代码中实现各种菜单

package com.example.menu;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class MainActivity extends Activity {

	private RelativeLayout myLayout; // 声明布局属性

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		myLayout = (RelativeLayout) findViewById(R.id.myLayout); // 获取对象
		registerForContextMenu(myLayout); // 注册上下文菜单

	}

	/*********************************** 选项菜单 Start OptionMenu ************************************************/

	// 选项菜单的实现
	public boolean onCreateOptionsMenu(Menu menu) {

		/*
		 * 参数说明: 1:组标识 2:菜单项ID ,唯一标识 3: 菜单项摆放的顺序 4:菜单上显示的文字
		 */
		MenuItem addMenuItem = menu.add(1, 0, 0, "添加"); // 添加菜单项
		addMenuItem.setIcon(R.drawable.icon_download2); // 设置图标
		MenuItem uppMenuItem = menu.add(1, 1, 1, "修改");
		uppMenuItem.setIcon(R.drawable.icon_download2);

		/* 子菜单实现 */
		SubMenu delSubMenu = menu.addSubMenu(1, 1, 1, "删除"); // 给menu添加子菜单
		delSubMenu.setHeaderIcon(R.drawable.icon_download2); // 设置子菜单单出框图标
		delSubMenu.setHeaderTitle("删除");
		delSubMenu.setIcon(R.drawable.icon_download2); // 创建子菜单的图标
		delSubMenu.add(2, 11, 11, "直接"); // 为子菜单添加二级菜单
		delSubMenu.add(2, 12, 12, "间接");

		SubMenu showSubMenu = menu.addSubMenu(1, 2, 2, "显示"); // 添加子菜单
		showSubMenu.setIcon(R.drawable.icon_download2); // 设置子菜单图标
		showSubMenu.setHeaderIcon(R.drawable.icon_download2); // 设置弹出框图标
		showSubMenu.setHeaderTitle("显示"); // 设置弹出框标题
		showSubMenu.add(2, 21, 21, "全显");
		showSubMenu.add(2, 21, 22, "慢显");

		return true;
	}

	// 选项菜单选择事件
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case 0:
			Toast.makeText(MainActivity.this, "选中了" + item.getTitle() + "菜单",
					Toast.LENGTH_LONG).show();
			break;

		case 1:
			Toast.makeText(MainActivity.this, "选中了" + item.getTitle() + "菜单",
					Toast.LENGTH_LONG).show();
			break;
		default:
			Toast.makeText(MainActivity.this, "选中了" + item.getTitle() + "菜单",
					Toast.LENGTH_LONG).show();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * 选项菜单被关闭时触发该方法: 1、back 按钮被点击 2、menu 按钮再次按下 3、选择了某一个菜单项
	 */
	public void onOptionsMenuClosed(Menu menu) {
		super.onOptionsMenuClosed(menu);
		Toast.makeText(MainActivity.this, "选项菜单被关闭了...", Toast.LENGTH_LONG)
				.show();
	}

	/**
	 * 选项菜单显示之前调用
	 * 
	 * @return false :此方法把menu点击的动作屏蔽了,onCreateOptionsMenu 方法不会调用
	 */
	public boolean onPrepareOptionsMenu(Menu menu) {
		Toast.makeText(MainActivity.this, "onPrepaareOptionsMenu()方法被调用...",
				Toast.LENGTH_LONG).show();
		return super.onPrepareOptionsMenu(menu);
	}

	/***************************************** End OptionMenu **************************************************************/

	/***************************************** 上下文菜单 Start ContextMenu **************************************************/

	// 创建上下文菜单
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderIcon(R.drawable.icon_download2); // 设置上下文菜单标题的图标
		menu.setHeaderTitle("设置背景颜色"); // 设置上下文菜单的标题
		MenuItem oneMenuItem = menu.add(Menu.NONE, 0, 0, "红色"); // 添加菜单项 一
		MenuItem twoMenuItem = menu.add(Menu.NONE, 1, 1, "黑色"); // 添加菜单项 二

	}

	// 上下文菜单选择事件
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case 0:
			Toast.makeText(MainActivity.this, "选择了" + item.getTitle() + "菜单",
					Toast.LENGTH_LONG).show();
			myLayout.setBackgroundColor(getResources().getColor(R.color.back)); // 设置颜色
			break;

		case 1:
			Toast.makeText(MainActivity.this, "选择了" + item.getTitle() + "菜单",
					Toast.LENGTH_LONG).show();
			myLayout.setBackgroundColor(getResources().getColor(R.color.red));// 设置颜色
			break;
		}
		return super.onContextItemSelected(item);
	}

	// 上下文菜单关闭时调用..
	public void onContextMenuClosed(Menu menu) {
		super.onContextMenuClosed(menu);
		Toast.makeText(MainActivity.this, "上下文菜单关闭...", Toast.LENGTH_LONG)
				.show();
	}

	/***************************************** End ContextMenu ***********************************************************/

	/***************************************** 子菜单 Start SubMenu ********************************************************/
	// 结合选项菜单或者上下文菜单使用,本次结合上选项菜单实现子菜单....
	/***************************************** End SubMenu ****************************************************************/

}














猜你喜欢

转载自sunzone.iteye.com/blog/1998104