什么是ContextMenu?
例如Windows系统的右键菜单,在Android中长按某个文件夹,会跳出菜单,这个菜单就是ContextMenu。
ContextMenu与OptionMenu的区别
1. OptionMenu对应的是activity,一个activity只能拥有一个选项菜单;
2. ContextMenu对应的是View,每一个View都可以设置上下文菜单;
3. 一般情况下ContextMenu常用于ListView或者GridView。
ContextMenu创建方法
首先给View 注册上下文菜单registerForContextMenu()
添加上下文菜单内容 onCreateContextMenu()
-- 可以通过代码动态添加;
-- 可以加载xml文件中的菜单项。
设置菜单点击后的响应事件 onContextItemSelected()。
1 public class MainActivity extends ActionBarActivity {
2
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.fragment_main);
7 showListView();
8
9 }
10
11 // 设置showListView显示内容
12 private void showListView() {
13 ListView listView = (ListView) findViewById(R.id.listView1);
14 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
15 android.R.layout.simple_list_item_1, getData());
16 listView.setAdapter(adapter);
17 this.registerForContextMenu(listView);
18
19 }
20
21 @Override
22 public void onCreateContextMenu(ContextMenu menu, View v,
23 ContextMenuInfo menuInfo) {
24 // TODO Auto-generated method stub
25 super.onCreateContextMenu(menu, v, menuInfo);
26 // 设置meun显示内容
27 menu.setHeaderTitle("文件操作");
28 menu.setHeaderIcon(R.drawable.ic_launcher);
29 // 方法一 代码加载
30 // menu.add(1, 1, 1, "复制");
31 // menu.add(1, 2, 1, "粘贴");
32 // menu.add(1, 3, 1, "剪切");
33 // menu.add(1, 4, 1, "重命名");
34 // 方法二, xml加载:
35 MenuInflater inflater = getMenuInflater();
36 inflater.inflate(R.menu.main, menu);
37
38 }
39
40 // 监听事件:
41 @Override
42 public boolean onContextItemSelected(MenuItem item) {
43 // TODO Auto-generated method stub
44
45 switch (item.getItemId()) {
46 // 方法一 代码加载:
47 case 1:
48 Toast.makeText(MainActivity.this, "点击复制", 0).show();
49 break;
50
51 case 2:
52 Toast.makeText(MainActivity.this, "点击粘贴", 0).show();
53 break;
54 case 3:
55 Toast.makeText(MainActivity.this, "点击剪切", 0).show();
56 break;
57
58 case 4:
59 Toast.makeText(MainActivity.this, "点击重命名", 0).show();
60 break;
61 // 方法二,xml加载
62 case R.id.context_menu_item1:
63 Toast.makeText(MainActivity.this, "点击复制", 0).show();
64 break;
65 case R.id.context_menu_item2:
66 Toast.makeText(MainActivity.this, "点击粘贴", 0).show();
67 break;
68 case R.id.context_menu_item3:
69 Toast.makeText(MainActivity.this, "点击剪切", 0).show();
70 break;
71 case R.id.context_menu_item4:
72 Toast.makeText(MainActivity.this, "点击重命名", 0).show();
73 break;
74
75 }
76 return super.onContextItemSelected(item);
77 }
78
79 // 构造listview显示数据
80 private ArrayList<String> getData() {
81
82 ArrayList<String> list = new ArrayList<String>();
83 for (int i = 1; i < 5; i++) {
84 list.add("文件" + i);
85 }
86 return list;
87 }
88 }
![]()