Android SubMenu 子菜单

SubMenu ( 子菜单 ),见字思义,就是菜单项又是一个菜单,从 XML 代码上来将,就是在 <item> 中又嵌套了一层 <menu>

子菜单不是单独存在的,而是在 OptionMenu 或者 ContextMenu 中可以添加子菜单

范例


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

  2. 修改 activity_main.xml 添加一个 按钮 ( Button )

    <?xml version="1.0" encoding="utf-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal" 
        android:orientation="vertical" >
    
        <Button 
            android:id="@+id/btn_pop" 
            android:text="长按我弹出上下文菜单"  
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    
  3. res 目录下新建一个资源目录 menu,然后在 res/menu 目录下新建文件 main_contextmenu.xml

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- checkableBehavior 的可选值由三个:single设置为单选,all为多选,none为普通选项 -->
        <group android:checkableBehavior="none">
            <item android:id="@+id/create"
                android:title="新建" />
            <item android:id="@+id/edit"
                android:title="编辑" />
        </group>
        <item android:id="@+id/saveall"
            android:title="子菜单" >
            <menu xmlns:android="http://schemas.android.com/apk/res/android">
                <item android:id="@+id/save"
                    android:title="保存" />
                <item android:id="@+id/save_as"
                    android:title="另存为..." />
                <item
                    android:id="@+id/save_all"
                    android:title="保存全部" />
            </menu>
        </item>
        <item android:id="@+id/help"
            android:title="帮助" />
    </menu>
    
  4. 直接修改 MainActivity.java

    package cn.twle.android.submenu;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import android.view.View;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.ContextMenu;
    
    import android.widget.Toast;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
    
        final private int OPEN = 111;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button btn_pop = (Button)findViewById(R.id.btn_pop);
    
            registerForContextMenu(btn_pop);
    
        }
    
        //重写上下文菜单的创建方法
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                                        ContextMenu.ContextMenuInfo menuInfo) {
    
            // 如果要给多个 view 注册上下文菜单,可以根据 v 参数来判断
    
            MenuInflater inflator = new MenuInflater(this);
            inflator.inflate(R.menu.main_contextmenu, menu);
    
            super.onCreateContextMenu(menu, v, menuInfo);
        }
    
        //上下文菜单被点击时触发该方法
        @Override
        public boolean onContextItemSelected(MenuItem item) {
    
            // 菜单项被选中时触发
            int id = item.getItemId();
            String label = "";
    
            switch (id){
                case R.id.create:
                    label = "新建";
                    break;
                case OPEN:
                    label = "打开";
                    break;
                case R.id.help:
                    label = "帮助";
                    break;
    
                case R.id.save_as:
                    label = "另存为";
                    break;
            }
    
            Toast.makeText(getApplicationContext(),"你点击了:" + label,Toast.LENGTH_SHORT).show();
    
            return super.onContextItemSelected(item);
        }
    }
    

如果想在 Java 代码中添加子菜单的话,可以调用 addSubMenu() 方法

比如 SubMenu file = menu.addSubMenu ("文件"); file 还需要 addItem 添加菜单项

参考文档

  1. Android menus

Android 基础教程

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

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

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