博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android菜单详解三:上下文菜单
阅读量:6680 次
发布时间:2019-06-25

本文共 1810 字,大约阅读时间需要 6 分钟。

创建一个上下文菜单

一个上下文菜单跟PC上的右键菜单类似.你应使用上下文菜单为用户界面上的某个部分提供动作选择功能.在Android中,一个上下文菜单会在用户长按一个界面条目时出现.

你可以为任何View创建上下文菜单,但是在 ListView中是最常用到上下文菜单的.每当用户在一个ListView项上长按,并且这个ListView注册了上下文菜单,那么被按的 list item就会弹出上下文菜单 (在联系人应用中就演示了这个过程).
Register a ListView
activity使ListViewlist items单,ListViewregisterForContextMenu()如:

registerForContextMenu(getListView());

为了使view提供上下文菜单,你必须为这个View向系统注册上下文菜单.调用方法 registerForContextMenu() 并传入要弹出菜单的 View 作为参数即可.当这个View被长按时,它就会显示一个上下文菜单.
为了定义上下文菜单的样子和行为,需重写你的activity的上下文菜单回调方法:onCreateContextMenu() 和onContextItemSelected().
例如,下面是一个 onCreateContextMenu() ,使用了资源文件 context_menu.xml :

@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); }MenuInflater 被用于从一个 菜单资源inflate出一个菜单. (你也可以使用 add() 来添加菜单项们) .回调函数的参数中包含了用户所选择的View 和一个ontextMenu.ContextMenuInfo 对象,它可以提供被选择的View的更多的信息.你可以使用这些参数来决定哪个上下文菜单应被创建.但是在这个例子中,Activity所有的上下文菜单都是相同的.

然后,当用户从上下文菜单选择一个菜单项时,系统会调用方法 onContextItemSelected(). 下面的例子展示了如何处理被选择的菜单项:

@Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case R.id.edit: editNote(info.id); return true; case R.id.delete: deleteNote(info.id); return true; default: return super.onContextItemSelected(item); } }这些代码与选项菜单中的例子代码基本相同.getItemId() 从所选的菜单项获取菜单ID,并且使用switch语句匹配菜单ID与对应的处理.并且同于选项菜单的例子,default语句调用父类的同一方法处理未被我们处理的菜单项.

在此例中,被选择的View条目是一个 ListView条目.为了在选择的一个view条目上执行相应的动作,应用程序需要知道View条目的list ID.为了获得 list ID,程序中调用了 getMenuInfo(), 它返回一个 AdapterView.AdapterContextMenuInfo 对象,这个对象包含了条目的list ID.本地方法editNote()和deleteNote()接受这个list ID用于执行一些作.

注: 上下文菜单项不支持图标或快捷键.

转载地址:http://yqnao.baihongyu.com/

你可能感兴趣的文章
30+有用的CSS代码片段
查看>>
PHP新手之学习类与对象(2)
查看>>
[Big Data - Kafka] Kafka设计解析(三):Kafka High Availability (下)
查看>>
Hibernate核心配置文件
查看>>
SpringBoot学习之一 Unable to find a single main class from the following candidates
查看>>
SpringCloud学习成长 四 断路器(Hystrix)
查看>>
Inventory Pro 装备拾取的实现
查看>>
Using SQL Server 2012 T-SQL New Features(转载)
查看>>
hihocoder [Offer收割]编程练习赛8
查看>>
colpick-jQuery颜色选择器使用说明
查看>>
python基础之socket编程
查看>>
fastdfs_nginx整合
查看>>
winform中键盘和鼠标事件的捕捉和重写
查看>>
C#中IEnumerable、ICollection、IList、List之间的区别
查看>>
UIAlertView
查看>>
博客园美化资源网站链接
查看>>
xfs 文件系统损坏修复 fscheck
查看>>
区块链开发_以太坊多重签名
查看>>
hdu 2844(二进制+多重背包)
查看>>
LC.100.Same Tree
查看>>