Android开发笔记(六十五)多样的菜单

这篇博客深入探讨了Android开发中的菜单机制,包括菜单Menu、上下文菜单ContextMenu的使用,详细讲解了菜单的点击事件处理以及如何实现弹窗PopupWindow。通过实例代码,帮助开发者理解并掌握Android菜单的多样实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

菜单Menu

Android的菜单分为两类:选项菜单和上下文菜单,默认使用选项菜单。菜单的布局文件存放在res/menu目录下,使用ADT新建一个Android工程,首页代码MainActivity中会自动生成onMenuOpened和onMenuItemSelected函数代码。


展示选项菜单的途径有三种:
1、按下菜单键;
2、在代码中手动打开选项菜单,即调用函数openOptionsMenu;
3、按下导航栏右侧溢出菜单按钮,溢出菜单参见《 Android开发笔记(二十)顶部导航栏ActionBar》;


下面是选项菜单需要重写的方法:
onMenuOpened : 在菜单弹出时调用,一般无需重写
onMenuItemSelected : 在菜单项选择时调用,查看该方法的源码,会发现该方法内部做分支处理,判断如果是选项菜单则调用onOptionsItemSelected,如果是上下文菜单则调用onContextItemSelected。一般无需重写
onCreateOptionsMenu : 在页面打开时调用,需要重写指定菜单项目
onOptionsItemSelected : 在选项菜单的菜单项选中时调用,需要重写对不同菜单项做分支处理
onPrepareOptionsMenu : 在准备打开选项菜单时调用,一般无需重写
onOptionsMenuClosed : 在选项菜单关闭时调用,一般无需重写


上下文菜单ContextMenu

上下文菜单类似于Windows上的右键菜单,只不过手机上没有鼠标右键,所以一般在某个控件被长按时弹出。


展示上下文菜单的途径有两种:
1、在某个控件被长按时弹出。通常在onStart函数中加入registerForContextMenu为指定控件注册上下文菜单,在onStop函数中加入unregisterForContextMenu为指定控件注销上下文菜单。
2、在代码中手动打开上下文菜单。先执行registerForContextMenu方法注册菜单,然后执行openContextMenu打开菜单,最后执行unregisterForContextMenu注销菜单。


下面是上下文菜单需要重写的方法:
onCreateContextMenu : 控件长按后,准备打开上下文菜单时调用,需要重写指定菜单项目
onContextItemSelected : 在上下文菜单的菜单项选中时调用,需要重写对不同菜单项做分支处理
onContextMenuClosed : 在上下文菜单关闭时调用,一般无需重写


菜单的点击事件

为方便理清两种菜单的相互关系与调用流程,我们对各种菜单点击事件做了测试,下面是不同场景下的日志结果:
打开页面
01-08 15:46:31.309: D/MainActivity(8885): onCreateOptionsMenu
01-08 15:46:31.309: D/MainActivity(8885): onPrepareOptionsMenu


点击弹出选项菜单
01-08 15:47:06.369: D/MainActivity(8885): onMenuOpened
01-08 15:47:06.373: D/MainActivity(8885): onPrepareOptionsMenu
01-08 15:47:06.373: D/MainActivity(8885): onMenuOpened


点击选项菜单的某项
01-08 15:47:31.909: D/MainActivity(8885): onMenuItemSelected
01-08 15:47:31.909: D/MainActivity(8885): onOptionsItemSelected


长按弹出上下文菜单
01-08 15:48:31.337: D/MainActivity(8885): onCreateContextMenu


点击上下文菜单的某项
01-08 15:49:04.589: D/MainActivity(8885): onMenuItemSelected
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值