zoukankan      html  css  js  c++  java
  • 一起学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_
    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     }

    备注

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

  • 相关阅读:
    Mac开发利器之程序员编辑器MacVim学习总结(转)
    FFmpeg的H.264解码器源代码简单分析
    Google推荐的图片加载库Glide
    Java集合及concurrent并发包总结(转)
    ArrayList、Vector和LinkedList等的差别与用法(基础回顾)
    应用最广泛的模式-工厂方法模式
    Android 开发 命名规范(基础回顾)
    Java线程问题(基础回顾)
    Mac下使用wireshark解决Interface为空的办法
    Express4.10.2开发框架中默认app.js的代码注释
  • 原文地址:https://www.cnblogs.com/hsiang/p/10568889.html
Copyright © 2011-2022 走看看