【Android】上下文菜单contextMenu

上下文菜单就是用户长按组件时弹出的菜单。需要重写Activity的onCreateContextMenu()方法。

先上类图。

1.继承关系:

2.关联关系:

ContextMenu下可以添加SubMenu,也可以直接添加MenuItem。


下面是一个例子。

activity类:

package com.zzj.ui.contextmunedemo;

import android.app.Activity;
import android.content.Intent;
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.Toast;

import com.zzj.ui.R;
import com.zzj.ui.menudemo.OtherActivity;

public class ContextMenuActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.contextmenu_activity);

		registerForContextMenu(findViewById(R.id.contextmenu_btn));
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		menu.setHeaderTitle("聊天")
				.setHeaderIcon(android.R.drawable.ic_menu_call);
		menu.add(Menu.NONE, Menu.FIRST + 0, 0, "设为未读");
		menu.add(Menu.NONE, Menu.FIRST + 1, 1, "删除");

		SubMenu fileMenu = menu.addSubMenu(Menu.NONE, Menu.FIRST + 2, 2, "文件")
				.setHeaderIcon(android.R.drawable.ic_menu_edit);
		fileMenu.add(Menu.NONE, Menu.FIRST + 20, 0, "打开").setIntent(
				new Intent(ContextMenuActivity.this, OtherActivity.class));
		fileMenu.add(Menu.NONE, Menu.FIRST + 21, 1, "保存");
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case Menu.FIRST + 0:
			display("设为未读");
			break;
		case Menu.FIRST + 1:
			display("删除");
			break;
		case Menu.FIRST + 2:
			display("文件");
			break;
		case Menu.FIRST + 20:
			display("打开");
			break;
		case Menu.FIRST + 21:
			display("保存");
			break;
		default:
			break;
		}
		/*
		 * 如果返回true,不会再触发MenuItem后面的事件。
		 * 
		 * 如本例中,点击【打开】菜单项时,不会跳转到另一个Activity。
		 * 
		 * 实际上就是控制事件传播
		 */
		return false;
	}

	@Override
	public void onContextMenuClosed(Menu menu) {
		display("上下文菜单关闭了");
	}

	private void display(String message) {
		Toast.makeText(this, message, Toast.LENGTH_LONG).show();
	}

}
其他代码就免了。


长按组件:


点击【文件】菜单:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值