一起学Android之Menu
程序员文章站
2022-03-30 11:31:22
菜单(Menu)在Android开发中,是一种常见的用户界面组件,通过使用菜单Api可以给用户提供常见的一致的体验 ......
概述
菜单(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 }
备注
菜单项的功能应用场景有很多,本文旨在抛砖引玉,共同学习。