一起学Android之Menu

历览千载书,时时见遗烈。这篇文章主要讲述一起学Android之Menu相关的知识,希望能为你提供帮助。
概述菜单(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 7public boolean onCreateOptionsMenu(Menu menu) { 8MenuInflater inflater = getMenuInflater(); 9inflater.inflate(R.menu.options_menu,menu); 10return true; 11} 12 13/** 14* 选项菜单,选中事件处理方法 15*/ 16@Override 17public boolean onOptionsItemSelected(MenuItem item) { 18switch (item.getItemId()){ 19case R.id.m_search : 20Toast.makeText(MainActivity.this,"查找",Toast.LENGTH_SHORT).show(); 21break; 22case R.id.m_setting : 23Toast.makeText(MainActivity.this,"设置",Toast.LENGTH_SHORT).show(); 24break; 25default: 26break; 27} 28return true; 29}

下文菜单(ContextMenu)通过重写Activity中的onCreateContextMenu方法来设置上下文菜单,通过重写onContextItemSelected方法来处理上下文菜单的事件。
【一起学Android之Menu】如下图所示,通过长按控件,就可以弹出上下文菜单。
一起学Android之Menu

文章图片

关键代码如下:
1/** 2* 上下文菜单,通过资源文件设置上下文菜单 3*/ 4@Override 5public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 6getMenuInflater().inflate(R.menu.context_menu,menu); 7} 8 9/** 10* 上下文菜单响应事件 11* @param item 12* @return 13*/ 14@Override 15public boolean onContextItemSelected(MenuItem item) { 16switch (item.getItemId()){ 17case R.id.get_width: 18Toast.makeText(MainActivity.this,"宽度="+tvContent.getWidth(),Toast.LENGTH_SHORT).show(); 19break; 20case R.id.get_height: 21Toast.makeText(MainActivity.this,"高度="+tvContent.getHeight(),Toast.LENGTH_SHORT).show(); 22break; 23default: 24break; 25} 26return true; 27}

上下文菜单需要通过注册到指定的控件上才可以
1 //为控件注册上下文菜单,一般用于GridView和ListView中 2registerForContextMenu(tvContent);

弹出菜单(PopupMenu)通过PopupMenu popupMenu=new PopupMenu(this,v)的方式,声明弹出菜单。其中第二个参数,是菜单锚定的控件,即菜单停靠在哪个控件上。
如下图所示:点击按钮时弹出菜单
一起学Android之Menu

文章图片

关键代码如下,调用show()方法显示菜单:
1/** 2* 3* @param v 控件本身 4*/ 5public void btnFontClick(View v){ 6//第二个参数是Anchor表示菜单停靠点 7PopupMenu popupMenu=new PopupMenu(this,v); 8getMenuInflater().inflate(R.menu.popumenu,popupMenu.getMenu()); 9popupMenu.show(); 10//设置监听事件 11popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 12@Override 13public boolean onMenuItemClick(MenuItem item) { 14switch (item.getItemId()){ 15case R.id.m_add: 16fontSize=fontSize+5; 17break; 18case R.id.m_sub: 19if(fontSize< =10) { 20Toast.makeText(MainActivity.this,"字体大小最小为10",Toast.LENGTH_SHORT).show(); 21}else{ 22fontSize = fontSize - 5; 23} 24break; 25} 26tvContent.setTextSize(fontSize); 27return false; 28} 29}); 30}

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

    推荐阅读