【Android】上下文菜单contextMenu

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

先上类图。

1.继承关系:

【Android】上下文菜单contextMenu_第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();
	}

}
其他代码就免了。


长按组件:

【Android】上下文菜单contextMenu_第2张图片

点击【文件】菜单:

【Android】上下文菜单contextMenu_第3张图片





你可能感兴趣的:(【Android】上下文菜单contextMenu)