Android菜单详解——子菜单(SubMenu)

1,子菜单就是将功能相同或相似的分组进行多级显示的一种菜单。

2,创建子菜单的步骤:

a) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单

b) 调用SubMenu的add()方法,添加子菜单

c) 覆盖onContextItemSelected()方法,响应子菜单的单击事件

3,使用代码动态添加SubMenu子菜单:

<pre name="code" class="java"><span style="font-size:18px;">package com.example.submenu;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    /*
     *设置menu子菜单显示的内容
     */
    @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);
    
    //通过addSubMenu方法添加两个子菜单
    SubMenu file=menu.addSubMenu("文件");
    SubMenu edit=menu.addSubMenu("编辑");
    //设置file子菜单中的内容(设置GroupId为1)
    file.add(1, 1, 1, "新建");
    file.add(1, 2, 1, "打开");
    file.add(1, 2, 1, "保存");
    file.setHeaderTitle("文件操作");  //设置子菜单的标题
    file.setHeaderIcon(R.drawable.ic_launcher);  //设置标题旁的图片
    //设置edit子菜单中的内容(设置GroupId为2)
    edit.add(2, 1, 1, "复制");
    edit.add(2, 2, 1, "粘贴");
    edit.add(2, 3, 1, "剪切");
    edit.setHeaderTitle("编辑操作");
    edit.setHeaderIcon(R.drawable.ic_launcher);
        return true;
    }
    /*
     * 设置菜单项的点击事件
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // 通过GroupId来判断是哪一个子菜单
    if (item.getGroupId()==1) {
    //通过ItemId来判断选中的是子菜单中的哪一项
	switch (item.getItemId()) {
		case 1:
			Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
			break;
		case 2:
			Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
			break;
		case 3:
			Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
			break;
		}
		}else if(item.getGroupId()==2){
		switch (item.getItemId()) {
		case 1:
			Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
			break;
		case 2:
			Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
			break;
		case 3:
			Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
			break;
		}
	}
    return super.onOptionsItemSelected(item);
    }
}</span>
 

4,使用XML添加SubMenu子菜单(在res的menu中编写代码):

<span style="font-size:18px;"><menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:showAsAction="never"
        android:title="文件">
        <menu>
            <item
                android:id="@+id/new_file"
                android:showAsAction="never"
                android:title="新建"/>
            <item
                android:id="@+id/open_file"
                android:showAsAction="never"
                android:title="打开"/>
            <item
                android:id="@+id/save_file"
                android:showAsAction="never"
                android:title="保存"/>
            
        </menu>
</item>

    <item
        android:showAsAction="never"
        android:title="编辑">
        <menu>
            <item
                android:id="@+id/c_edit"
                android:showAsAction="never"
                android:title="复制"/>
            <item
                android:id="@+id/v_edit"
                android:showAsAction="never"
                android:title="粘贴"/>
            <item
                android:id="@+id/x_edit"
                android:showAsAction="never"
                android:title="剪切"/>
        
        </menu>
</item>
</menu></span>

5,使用XML添加SubMenu子菜单时MainActivity中的代码:

<pre name="code" class="java"><span style="font-size:18px;">package com.example.submenu;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Toast;

public class MainActivity extends Activity{

 @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
   }
 @Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {

 //super.onCreateContextMenu(menu, v, menuInfo);
 MenuInflater inflater=getMenuInflater();
 inflater.inflate(R.menu.main, menu);
}
 @Override
public boolean onOptionsItemSelected(MenuItem item) {

 switch (item.getItemId()){
	case R.id.new_file:
		Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.open_file:
		Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.save_file:
		Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.c_edit:
		Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.v_edit:
		Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.x_edit:
		Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
		break;
	}
	return super.onOptionsItemSelected(item);
	}
}</span>


 

6,实现效果:


点击子菜单项后的效果,例如点击“文件”:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值