上下文菜单就是用户长按组件时弹出的菜单。需要重写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();
- }
- }
长按组件:
点击【文件】菜单: