菜单资源(menu)的简单使用

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

Android中的菜单分为选项菜单、上下文菜单和子菜单,都可以在XML文件中声明定义,在代码中通过MenuInflater类使用。

典型菜单资源文件结构是这样的:<menu>根元素,在根元素里面嵌套<item>和<group>子元素,<item>元素中也可嵌套<menu>形成子菜单。<group>表示一个菜单组,相同的菜单组可以一起设置属性。

下面通过一个实例来演示,本实例中定义了一个文件系统的菜单信息,主菜单包括File、Edit、Help三个菜单项。File菜单有New、Open、Save子菜单项;

Edit菜单有Cut、Copy、Past子菜单,Help菜单有About和Exit子菜单项。Help子菜单可以响应单击事件。

Activity:

package com.lovo;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class TestMenuActivity extends Activity {
	/** 创建一个MenuInflater对象 */
	private MenuInflater mi = new MenuInflater(this);

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

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// 调用MenuInflater的inflate方法,通过配置文件创建菜单
		mi.inflate(R.menu.file_menu, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		// 显示关于对话框
		case R.id.about:
			aboutAlert("本实例演示的是如何使用菜单资源定义菜单!");
			break;
		case R.id.exit:
			exitAlert("真的要退出吗?");
			break;
		}
		return true;
	}

	private void exitAlert(String msg) {
		// 实例化AlertDialog.Builder对象
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		// 设置显示信息
		builder.setMessage(msg).setCancelable(false)
		// 确定按钮
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// 结束Activity
						finish();
					}
				})
				// 取消按钮
				.setNegativeButton("取消", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						return;
					}
				});
		// 创建对话框
		AlertDialog alert = builder.create();
		// 显示对话框
		alert.show();
	}

	private void aboutAlert(String message) {
		// 实例化AlertDialog.Builder对象
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setMessage(message).setCancelable(false)
		// 确定按钮
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
					}
				});
		// 创建对话框
		AlertDialog alert = builder.create();
		// 显示对话框
		alert.show();
	}
}
<?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:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试菜单资源" />

</LinearLayout>


menuXML:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:title="File">
        <menu>
            <group
                android:id="@+id/noncheckable_group"
                android:checkableBehavior="none" >
                <item
                    android:id="@+id/newFile"
                    android:alphabeticShortcut="n"
                    android:title="New"/>
                <item
                    android:id="@+id/openFile"
                    android:alphabeticShortcut="o"
                    android:title="Open"/>
                <item
                    android:id="@+id/saveFile"
                    android:alphabeticShortcut="s"
                    android:title="Save"/>
            </group>
        </menu>
    </item>
    <item android:title="Edit">
        <menu>


            <!-- checkableBehavior="single"选择行为为单选 -->
            <group
                android:id="@+id/edit_group"
                android:checkableBehavior="single" >
                <item
                    android:id="@+id/cut"
                    android:title="Cut"/>
                <item
                    android:id="@+id/copy"
                    android:title="Copy"/>
                <item
                    android:id="@+id/past"
                    android:title="Past"/>
            </group>
        </menu>
    </item>
    <item android:title="Help">
        <menu>
            <group android:id="@+id/help_group" >
                <item
                    android:id="@+id/about"
                    android:title="About"/>
                <item
                    android:id="@+id/exit"
                    android:title="Exit"/>
            </group>
        </menu>
    </item>

</menu>



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

u010142437

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值