SubMenu子菜单

当点击每一个页面中的选项菜单时,会在页面中弹出一个悬浮窗口,这就是SubMenu子菜单,子菜单中有标题,例如:文件,还有下面的菜单项组成,并且该菜单项是和文件操作相关的。

动态添加子菜单:

package com.example.submenu;

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

@SuppressLint("ShowToast")
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) {
        // Inflate the menu; this adds items to the action bar if it is present.
        //getMenuInflater().inflate(R.menu.main, menu);
        //通过代码,动态添加子菜单
        SubMenu file=menu.addSubMenu("文件");//返回值是一个SubMenu子菜单
        SubMenu edit=menu.addSubMenu("编辑"); 
        file.add(1, 1, 1, "新建");
        file.add(1, 2, 1, "打开");        
        file.add(1, 3, 1, "保存");
        file.setHeaderTitle("文件操作");

        edit.add(2, 1, 1, "复制");
        edit.add(2, 2, 1, "粘贴");    
        edit.add(2, 3, 1, "剪切");    
        edit.setHeaderTitle("编辑操作");
        return true;
    }
/*
 * 重写onOptionsItemSelected()方法,用switch语句判断当前当前点击的是哪个GroupId
 * 监听子菜单的点击事件
 */

    @SuppressLint("ShowToast")
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getGroupId()==1){
            switch (item.getItemId()) {
            case 1:
                Toast.makeText(MainActivity.this, "点击了新建", Toast.LENGTH_SHORT);
                break;
            case 2:
                Toast.makeText(MainActivity.this, "点击了打开", Toast.LENGTH_SHORT);
                break;
            case 3:
                Toast.makeText(MainActivity.this, "点击了保存", Toast.LENGTH_SHORT);
                break;          
            }
        }else if (item.getGroupId()==2) {
            switch (item.getItemId()) {
            case 1:
                Toast.makeText(MainActivity.this, "点击了复制", Toast.LENGTH_SHORT);
                break;
            case 2:
                Toast.makeText(MainActivity.this, "点击了粘贴", Toast.LENGTH_SHORT);
                break;
            case 3:
                Toast.makeText(MainActivity.this, "点击了剪切", Toast.LENGTH_SHORT);
                break;          
            }           
        }
        return super.onOptionsItemSelected(item);
    }
}

使用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="com.example.submenu.MainActivity" >

    <item
        android:id="@+id/file"
        android:orderInCategory="100"
        android:title="文件"
        app:showAsAction="never">
        <menu>
            <item
                android:id="@+id/new_file1"
                android:showAsAction="never"
                android:title="新建"/>
            <item
                android:id="@+id/new_file2"
                android:showAsAction="never"
                android:title="打开"/>
            <item
                android:id="@+id/new_file3"
                android:showAsAction="never"
                android:title="保存"/>
        </menu>
    </item>
    <item
        android:id="@+id/edit"
        android:orderInCategory="100"
        android:title="编辑"
        app:showAsAction="never">
        <menu>
            <item
                android:id="@+id/new_edit1"
                android:showAsAction="never"
                android:title="复制"/>
            <item
                android:id="@+id/new_edit2"
                android:showAsAction="never"
                android:title="剪切"/>
            <item
                android:id="@+id/new_edit3"
                android:showAsAction="never"
                android:title="重命名"/>
        </menu>
    </item>
</menu> 

修改menu菜单之后的main.xml文件:

package com.example.submenu;

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

@SuppressLint("ShowToast")
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) {
        // Inflate the menu; this adds items to the action bar if it is present.
        //getMenuInflater().inflate(R.menu.main, menu);
        //通过代码,动态添加子菜单



/*      SubMenu file=menu.addSubMenu("文件");//返回值是一个SubMenu子菜单
        SubMenu edit=menu.addSubMenu("编辑"); 
        file.add(1, 1, 1, "新建");
        file.add(1, 2, 1, "打开");        
        file.add(1, 3, 1, "保存");
        file.setHeaderTitle("文件操作");

        edit.add(2, 1, 1, "复制");
        edit.add(2, 2, 1, "粘贴");    
        edit.add(2, 3, 1, "剪切");    
        edit.setHeaderTitle("编辑操作");*/

        //方法二:实现创建子菜单
        MenuInflater inflater=getMenuInflater();
        inflater.inflate(R.menu.main, menu);

        return true;
    }

/*
 * 重写onOptionsItemSelected()方法,用switch语句判断当前当前点击的是哪个GroupId
 * 监听子菜单的点击事件
 */

    @SuppressLint("ShowToast")
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.new_file1:
            Toast.makeText(MainActivity.this, "点击了新建", Toast.LENGTH_SHORT);
            break;
        case R.id.new_file2:
            Toast.makeText(MainActivity.this, "点击了打开", Toast.LENGTH_SHORT);
            break;
        case R.id.new_file3:
            Toast.makeText(MainActivity.this, "点击了保存", Toast.LENGTH_SHORT);
            break;
        case R.id.new_edit1:
            Toast.makeText(MainActivity.this, "点击了复制", Toast.LENGTH_SHORT);
            break;
        case R.id.new_edit2:
            Toast.makeText(MainActivity.this, "点击了粘贴", Toast.LENGTH_SHORT);
            break;
        case R.id.new_edit3:
            Toast.makeText(MainActivity.this, "点击了剪切", Toast.LENGTH_SHORT);
            break;
        }       

        return super.onOptionsItemSelected(item);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值