android 多个上下文菜单,Android 上下文菜单(Context Menu)(示例代码)

一、概述

Android中,上下文菜单是通过onLongClick(...)事件访问的。在事件触发后显示菜单项。

在使用上下文菜单时,通常在onCreate(...)方法中,先行注册上下文菜单。在实现onCreateContextMenu(...)方法和onContextItemSelected(...)方法。

注册菜单方法:registerForContextMenu(...)

注销注册菜单方法:unregisterForContextMenu(...)

二、使用XML文件添加上下文菜单

text_menu.xml上下文菜单选项:

1 <?xml version="1.0" encoding="utf-8"?>

2

3

4

5

6

7 android:title="New"

8 android:icon="@android:drawable/ic_input_add"

9 android:alphabeticShortcut="n" />

10

11 android:title="Save"

12 android:icon="@android:drawable/ic_menu_save"

13 android:alphabeticShortcut="s" />

14

15

16

17

18

19

20

21

22 android:title="Cut"

23 android:alphabeticShortcut="Ctrl + x" />

24

25 android:title="Copy"

26 android:alphabeticShortcut="Ctrl + c" />

27

28 android:title="Paste"

29 android:alphabeticShortcut="Ctrl + v" />

30

31

32

33

在代码中,添加上下文菜单显示,及在选择上下文菜单项时触发事件(MainActivity.java):

1 public class MainActivity extendsActivity2 {3 private static final String TAG = "MainActivity";4 privateContext mContext;5 privateEditText mEditMenu;6 privateMenuInflater mMenuInflater;7

8 @Override9 public voidonCreate(Bundle savedInstanceState)10 {11 super.onCreate(savedInstanceState);12 setContentView(R.layout.activity_main);13

14 mContext =getApplicationContext();15

16 //绑定菜单按钮事件

17 mEditMenu =(EditText) findViewById(R.id.input_text3);18 //注册上下文菜单

19 registerForContextMenu(mEditMenu);20 }21

22 //上下文菜单,与EditView控件绑定,长按显示菜单项

23 @Override24 public voidonCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo contextMenuInfo)25 {26 super.onCreateContextMenu(menu, view, contextMenuInfo);27 //创建新的contextMenu对象

28 mMenuInflater = new MenuInflater(this);29 //使用XML与原menu对象对新ContextMenu对象初始化

30 mMenuInflater.inflate(R.menu.text_menu, menu);31 }32

33 //上下文菜单,触发上下文菜单项点击事件时响应

34 @Override35 public booleanonContextItemSelected(MenuItem item)36 {37 switch(item.getItemId())38 {39 caseR.id.file_new:40 {41 Toast.makeText(mContext, "File new.", Toast.LENGTH_SHORT).show();42 break;43 }44 caseR.id.file_save:45 {46 Toast.makeText(mContext, "File save.", Toast.LENGTH_SHORT).show();47 break;48 }49 caseR.id.cut:50 {51 Toast.makeText(mContext, "Edit cut.", Toast.LENGTH_SHORT).show();52 break;53 }54 caseR.id.copy:55 {56 Toast.makeText(mContext, "Edit copy.", Toast.LENGTH_SHORT).show();57 break;58 }59 caseR.id.paste:60 {61 Toast.makeText(mContext, "Edit paste.", Toast.LENGTH_SHORT).show();62 break;63 }64 default:65 Toast.makeText(mContext, "无响应", Toast.LENGTH_SHORT).show();66 }67 return true;68 }69

70 //注销注册过的上下文菜单

71 @Override72 public voidonDestroy()73 {74 super.onDestroy();75 unregisterForContextMenu(mEditMenu);76 }77 }

PS:ContextMenu的任何项在被选中后,整个ContextMenu会自动被系统关闭掉,即使多选项也是这样。这样的话,多选项的行为就有些怪异。查看Android的源码后,发现这是个Android的bug,应该是google没考虑多选项的情况。

尽管上下文菜单的拥有者是View,生成上下文菜单却是通过Activity中的onCreateContextMenu ( ContextMenu  menu,  View  v,ContextMenu.ContextMenuInfo  menuInfo)方法,该方法很像生成Options Menu的onCreateOptionsMenu ( Menu  menu)方法。两者的不同在于,onCreateOptionsMenu 只在用户 第一次 按“Menu”键时被调用,而onCreateContextMenu 会在用户 每一次 长按View时被调用,而且View必须已经注册了上下文菜单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值