Android OptionMenu 选项菜单

接下来几章节我们来学习 Android 中的 menu (菜单)

Menu

Android 中的 Menu (菜单) 有以下几种

  • OptionMenu :选项菜单,通过 Menu 键来调用 (现在手机一般都没目录键了)

  • SubMenu :子菜单,点击子菜单将弹出一个显示子菜单项的悬浮框, 子菜单不支持嵌套,即不能包括其它子菜单

  • ContextMenu :上下文菜单,通过长按某个 UI 组件后出现的菜单,该组件需注册上下文菜单

本章节我们就先来学习下 OptionMenu 选项菜单

OptionMenu ( 选项菜单 )

OptionMenu 在 Android 3.0+ 是通过 ActionBar 中的 setting 菜单

在 Android 5.0+ 的版本中则是在 ToolBar 中,点击后弹出出一个溢出式的菜单样

创建 OptionMenu

Android 没有提供 XML 形式的 OptionMenu 创建方法,也没有提供实例化一个类的创建方法,而是通过重写 Activity 中的几个方法来创建

Activity 提供了以下几个方法用于创建 OptionMenu 和与之交互

方法 说明
boolean onCreateOptionsMenu(Menu menu) 调用 OptionMenu,完成菜单初始化
boolean onOptionsItemSelected(MenuItem item) 菜单项被选中时触发,完成事件处理
void onOptionsMenuClosed(Menu menu) 选项菜单关闭会调用该方法
boolean onPrepareOptionsMenu(Menu menu) 选项菜单显示前会调用该方法,可在这里进行菜单的调整(动态加载菜单列表)
boolean onMenuOpened(int featureId, Menu menu) 选项菜单打开以后会调用这个方法

而创建菜单项的方式有两种

  1. 直接通过编写菜单 XML 文件,然后调用下面的方法加载菜单

    getMenuInflater().inflate(R.menu.menu_main, menu);
    
  2. 通过代码动态添加,onCreateOptionsMenu(menu) 中的参数 menu,调用 add() 方法添加菜单

    add(int groupId, int itemId, int order, CharSequence title)
    

范例

下面我们就一步一步来创建一个 OptionMenu 吧,先放一下最后的效果图


  1. 创建一个 空的 Android 项目 cn.twle.android.OptionMenu

  2. res 目录下新建一个资源目录 menu,然后在 res/menu 目录下新建文件 main_optionmenu.xml

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@+id/create"
            android:title="新建" />
        <item android:id="@+id/edit"
            android:title="编辑" />
        <item android:id="@+id/save"
            android:title="保存" />
        <item android:id="@+id/save_as"
            android:title="另存为..." />
        <item android:id="@+id/help"
            android:title="帮助" />
    </menu>
    
  3. 直接修改 MainActivity.java

    package cn.twle.android.optionmenu;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        // 1. 定义菜单项的标识
        final private int  OPEN = 111;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
    
            // 加载 XML 菜单目录
            getMenuInflater().inflate(R.menu.main_optionmenu, menu);
    
            menu.add(1,OPEN,0,"打开");
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
    
            // 菜单项被选中时触发
            int id = item.getItemId();
            String label = "";
    
            Log.d("OptionMenu",String.valueOf(id));
    
            switch (id){
                case R.id.create:
                    label = "新建";
                    break;
                case OPEN:
                    label = "打开";
                    break;
                case R.id.help:
                    label = "帮助";
                    break;
            }
    
            Toast.makeText(getApplicationContext(),"你点击了:" + label,Toast.LENGTH_SHORT).show();
    
            return super.onOptionsItemSelected(item);
        }
    }
    

参考文档

  1. Android menus

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.