上下文菜单(ContextMenu)

本文介绍如何在Android应用中实现上下文菜单功能,包括通过Java代码注册和创建上下文菜单,以及如何为菜单项添加点击事件以改变视图的颜色。
/*
 * 上下文菜单(ContextMenu)
 * 上下文菜单和开发选项菜单的方法基本想似,开发上下文菜单和开发选项菜单的区别在于:
 * 开发上下文菜单不是重写onCreateOptionMunu(Menu menu)方法,而是重写
 *onCreateContextMenu(ContextMenu menu, View source,ContextMenu.ContextMenuIfo menuInfo)
 * 方法,而其中的source参数代表上下文菜单的组件
 * 开发上下文菜单步骤如下:
 * 1.重写Activity的onCreateContextMenu(ContextMenu menu, View source,ContextMenu.ContextMenuIfo menuInfo)方法
 * 2.调用Activity的registerFouContextMenu(View view)方法为 view组件注册上下文菜单
 * 3.如果希望应用程序能为菜单提供响应,可以考虑重写 onContextItemSelected(MenuItem mi)方法
 */
import 略
public class Ex002_15Activity extends Activity {
	// 为每个菜单定义标识
	final int MENU1 = 0x111;
	final int MENU2 = 0x112;
	final int MENU3 = 0x113;
	final int MENU4 = 0x114;
	private TextView tv;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		tv = (Button) findViewById(R.id.button1);
		// 为按钮注册上下文菜单
		registerForContextMenu(tv);
	}

	// 每次创建上下文菜单时都会触发该事件
	public void onCreateContextMenu(ContextMenu menu, View source,
			ContextMenuInfo menuInfo) {
		menu.add(0, MENU1, 0, "红色");
		menu.add(0, MENU2, 0, "绿色");
		menu.add(0, MENU3, 0, "蓝色");
		// 将三个菜单设置成单选菜单项
		menu.setGroupCheckable(0, true, true);
		// 设置菜单的标题和图标
		menu.setHeaderTitle("选择背景颜色").setHeaderIcon(R.drawable.tools);
	}

	// 菜单项被单击时触发的事件
	public boolean onContextItemSelected(MenuItem mi) {
		switch (mi.getItemId()) {
		case MENU1:
			mi.setCheckable(true);
			tv.setTextColor(Color.RED);
			break;
		case MENU2:
			mi.setCheckable(true);
			tv.setTextColor(Color.GREEN);
			break;
		case MENU3:
			mi.setCheckable(true);
			tv.setTextColor(Color.BLUE);
			break;
		default:
			tv.setTextColor(Color.WHITE);
		}
		return true;
	}
}


下面我们来看下运行后的结果:

总结:上面的程序中我们调用了registerForContextMenu(tv)为tv组件注册了上下文菜单,这意味
着只要用户长按该组件时就会显示该上下文菜单。
需要指出的是,实际上Android提供了两种创建菜单的方式,一种是在Java代码中创建,一种是
使用XML文件来定义菜单,这种方式可以提供更好的解耦..........我将在后续的文章中写如和用xml
文件定义菜单,请继续关注............thanks!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值