Android学习(二十三)SubMenu 子菜单

一、SubMenu子菜单

  和功能菜单相似,但是可以添加子菜单。

二、实现步骤:

  1、通过onCreateOptionsMenu方法创建子菜单,可以通过代码动态创建,也可以通过xml进行创建。

  2、通过onOptionsItemSelected方法实现点击子菜单的事件。

三、参考代码:

  1、通过代码动态创建子菜单:

    main.java

package com.example.zhengcheng.submenudemo;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //通过代码动态创建子菜单
        SubMenu menu_file = menu.addSubMenu("文件");  //创建文件菜单
        SubMenu menu_edit = menu.addSubMenu("编辑");  //创建编辑菜单

        //为文件菜单创建子菜单
        menu_file.add(1, 101, 1, "新建");
        menu_file.add(1, 102, 1, "打开");
        menu_file.add(1, 103, 1, "保存");
        menu_file.setHeaderTitle("文件操作");              //设置菜单标题
        menu_file.setHeaderIcon(R.mipmap.ic_launcher);    //设置菜单图标

        //为编辑菜单创建子菜单
        menu_edit.add(2, 101, 1, "复制");
        menu_edit.add(2, 102, 1, "粘贴");
        menu_edit.add(2, 103, 1, "剪切");
        menu_edit.setHeaderTitle("编辑操作");              //设置菜单标题
        menu_edit.setHeaderIcon(R.mipmap.ic_launcher);    //设置菜单图标
        return true;
    }

    /**
     * 点击子菜单按钮后触发的操作
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getGroupId()) {
            case 1:
                //点击了第一组子菜单,对应第一组子菜单下的按钮
                switch (item.getItemId()) {
                    case 101:
                        Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
                        break;
                    case 102:
                        Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
                        break;
                    case 103:
                        Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
                        break;
                }
                break;
            case 2:
                //点击了第二组子菜单,对应第二组子菜单下的按钮
                switch (item.getItemId()) {
                    case 101:
                        Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
                        break;
                    case 102:
                        Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
                        break;
                    case 103:
                        Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
                        break;
                }
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}

  2、通过xml创建子菜单

  生成子菜单文件

  menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item
        android:title="文件"
        app:showAsAction="never">
        <menu>
            <item
                android:id="@+id/menu_new"
                android:title="新建"/>
            <item
                android:id="@+id/menu_open"
                android:title="打开" />
            <item
                android:id="@+id/menu_save"
                android:title="保存" />
            <item
                android:id="@+id/menu_exit"
                android:title="退出" />
        </menu>
    </item>
    <item
        android:title="编辑"
        app:showAsAction="never">
        <menu>
            <item
                android:id="@+id/menu_copy"
                android:title="复制" />
            <item
                android:id="@+id/menu_paste"
                android:title="粘贴" />
            <item
                android:id="@+id/menu_cut"
                android:title="剪切" />
        </menu>
    </item>
</menu>

main.java:后台代码文件

package com.example.zhengcheng.submenudemo;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //导入xml菜单内容
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        return true;
    }

    /**
     * 点击子菜单按钮后触发的操作
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.menu_new:
                Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_open:
                Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_save:
                Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_exit:
                Toast.makeText(this, "点击了退出", Toast.LENGTH_SHORT).show();
                finish();
                break;
            case R.id.menu_copy:
                Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_paste:
                Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_cut:
                Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}
原文地址:https://www.cnblogs.com/zhengcheng/p/4437623.html