欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

一起学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的左上角的三个白色圆点显示,当点击时弹出菜单内容。

一起学Android之Menu一起学Android之Menu

关键代码如下:

 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方法来处理上下文菜单的事件。

如下图所示,通过长按控件,就可以弹出上下文菜单。

一起学Android之Menu

关键代码如下:

 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)的方式,声明弹出菜单。其中第二个参数,是菜单锚定的控件,即菜单停靠在哪个控件上。

如下图所示:点击按钮时弹出菜单

一起学Android之Menu

关键代码如下,调用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     }

备注

菜单项的功能应用场景有很多,本文旨在抛砖引玉,共同学习。