一起学Android之Menu
概述
菜单(Menu)在Android开发中,是一种常见的用户界面组件,通过使用菜单Api可以给用户提供常见的一致的体验。本文主要讲解三种菜单的相关内容。
菜单的分类
- 选项菜单(OptionsMenu):选项菜单是活动菜单项的主要集合,主要应用于App上有全局影响的功能,如:搜索,设置等。
- 上下文菜单(ContextMenu):上下文菜单是一个浮动菜单,当用户在元素上进行长时间单击时会出现。它提供了影响选定内容或上下文框架的操作。
- 弹出菜单(PopupMenu):弹出菜单主要应用于列表中的列表项,弹出菜单锚定在调用菜单的视图控件上。
涉及知识点
- registerForContextMenu 注册上下文菜单方法。
- getMenuInflater() 获取菜单填充对象,通过资源文件实例化菜单对象。
- popupMenu.getMenu 获取菜单对象
选项菜单(OptionsMenu)
通过重写Activity中的onCreateOptionsMenu 方法,来设置选项菜单;通过重写onOptionsItemSelected方法来处理选项菜单的事件功能。
如下图所示:选项菜单位于App的左上角的三个白色圆点显示,当点击时弹出菜单内容。
关键代码如下:
1 /** 2 * onCreateOptionsMenu重写方法用于创建选项菜单 3 * 可以通过资源文件进行创建,也可以通过代码进行创建。 4 * 返回值,如果是true则显示菜单,如果是false则不显示菜单 5 */ 6 @Override 7 public boolean onCreateOptionsMenu(Menu menu) { 8 MenuInflater inflater = getMenuInflater(); 9 inflater.inflate(R.menu.options_menu,menu); 10 return true; 11 } 12 13 /** 14 * 选项菜单,选中事件处理方法 15 */ 16 @Override 17 public boolean onOptionsItemSelected(MenuItem item) { 18 switch (item.getItemId()){ 19 case R.id.m_search : 20 Toast.makeText(MainActivity.this,"查找",Toast.LENGTH_SHORT).show(); 21 break; 22 case R.id.m_setting : 23 Toast.makeText(MainActivity.this,"设置",Toast.LENGTH_SHORT).show(); 24 break; 25 default: 26 break; 27 } 28 return true; 29 }
下文菜单(ContextMenu)
通过重写Activity中的onCreateContextMenu方法来设置上下文菜单,通过重写onContextItemSelected方法来处理上下文菜单的事件。
如下图所示,通过长按控件,就可以弹出上下文菜单。
关键代码如下:
1 /** 2 * 上下文菜单,通过资源文件设置上下文菜单 3 */ 4 @Override 5 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 6 getMenuInflater().inflate(R.menu.context_menu,menu); 7 } 8 9 /** 10 * 上下文菜单响应事件 11 * @param item 12 * @return 13 */ 14 @Override 15 public boolean onContextItemSelected(MenuItem item) { 16 switch (item.getItemId()){ 17 case R.id.get_width: 18 Toast.makeText(MainActivity.this,"宽度="+tvContent.getWidth(),Toast.LENGTH_SHORT).show(); 19 break; 20 case R.id.get_height: 21 Toast.makeText(MainActivity.this,"高度="+tvContent.getHeight(),Toast.LENGTH_SHORT).show(); 22 break; 23 default: 24 break; 25 } 26 return true; 27 }
上下文菜单需要通过注册到指定的控件上才可以
1 //为控件注册上下文菜单,一般用于GridView和ListView中 2 registerForContextMenu(tvContent);
弹出菜单(PopupMenu)
通过PopupMenu popupMenu=new PopupMenu(this,v)的方式,声明弹出菜单。其中第二个参数,是菜单锚定的控件,即菜单停靠在哪个控件上。
如下图所示:点击按钮时弹出菜单
关键代码如下,调用show()方法显示菜单:
1 /** 2 * 3 * @param v 控件本身 4 */ 5 public void btnFontClick(View v){ 6 //第二个参数是Anchor表示菜单停靠点 7 PopupMenu popupMenu=new PopupMenu(this,v); 8 getMenuInflater().inflate(R.menu.popumenu,popupMenu.getMenu()); 9 popupMenu.show(); 10 //设置监听事件 11 popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 12 @Override 13 public boolean onMenuItemClick(MenuItem item) { 14 switch (item.getItemId()){ 15 case R.id.m_add: 16 fontSize=fontSize+5; 17 break; 18 case R.id.m_sub: 19 if(fontSize<=10) { 20 Toast.makeText(MainActivity.this,"字体大小最小为10",Toast.LENGTH_SHORT).show(); 21 }else{ 22 fontSize = fontSize - 5; 23 } 24 break; 25 } 26 tvContent.setTextSize(fontSize); 27 return false; 28 } 29 }); 30 }
备注
菜单项的功能应用场景有很多,本文旨在抛砖引玉,共同学习。
作者:老码识途
出处:http://www.cnblogs.com/hsiang/
本文版权归作者和博客园共有,写文不易,支持原创,欢迎转载【点赞】,转载请保留此段声明,且在文章页面明显位置给出原文连接,谢谢。
关注个人公众号,定时同步更新技术及职场文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)