Android之通过xml设置Menu选项

本文详细介绍了如何通过XML文件配置Android Menu,利用Menu和MenuInflater实现菜单的个性化展示,包括如何在onCreateOptionsMenu中加载菜单资源,如何在onOptionsItemSelected中响应菜单项的点击事件,并提供了实例代码演示了浏览组和邮件组的显示与隐藏逻辑。

一种简单方便的方法就是通过XML文件来配置Menu菜单,设置的时候用Menu或者MenuInflater

通常情况下,覆写Menu按键按下去的时候的回调函数onCreateOptionsMenu

在该函数中配置Menu

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.groups, menu);

该菜单对应的资源文件为res/menu/groups.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/browser_visibility"
        android:title="@string/browser_visibility" />
    <group android:id="@+id/browser">
        <item android:id="@+id/refresh"
            android:title="@string/browser_refresh" />
        <item android:id="@+id/bookmark"
            android:title="@string/browser_bookmark" />
    </group>
    <item android:id="@+id/email_visibility"
        android:title="@string/email_visibility" />
    <group android:id="@+id/email">
        <item android:id="@+id/reply"
            android:title="@string/email_reply" />
        <item android:id="@+id/forward"
            android:title="@string/email_forward" />
    </group>
</menu>


当菜单中某一选项被按下的时候,通常覆写回调函数onOptionsItemSelected

switch (item.getItemId()) {
    case R.id.browser_visibility:
       //对浏览组显示或者隐藏
       final boolean shouldShowBrowser = !mMenu.findItem(R.id.refresh).isVisible();
       mMenu.setGroupVisible(R.id.browser, shouldShowBrowser);
       break;
                
   case R.id.email_visibility:
       // 对email组进行显示或者隐藏
      final boolean shouldShowEmail =  !mMenu.findItem(R.id.reply).isVisible();
      mMenu.setGroupVisible(R.id.email, shouldShowEmail);
       break;
     // 默认选项会给出提示信息
     default:
      if (!item.hasSubMenu()) {
      Toast.makeText(this, item.getTitle(),Toast.LENGTH_SHORT).show();
        return true;
         }
     break;
}

mMenu是一个全局的私有变量


如果一个应用程序中包含多个Activity,并且想在每个Actiivty中都显示Menu的话,可以考虑创建一个Activity,实现onCreateOptionsMenu()和onOptionItemSelected()两个方法,其他的Activity在实现的时候,继承该类就可以了

这样只需要管理一组Menu就可以了

如果需要添加菜单的话,只需要覆写onCreateOptionMenu()方法,并且调用super.onCreateOptionsMenu(menu)以便显示原来的Menu,然后用menu.add()来添加

在HV Menu基础上,改进成读取xml文件的方式来做的菜单,可以横向、纵向,样式可自定义,更加方便了制作动态的菜单和用程序控制菜单权限。XML定义简单直观<br><br><?xml version="1.0" encoding="utf-8" ?><br><br><menus><br> <menu name="文件" link="#" background="" height="20" width="68"><br> <menu name="新建" link="javascript:alert(&apos;新建&apos;)" background="" height="20" width="68"></menu><br> <menu name="打开" link="javascript:alert(&apos;打开&apos;)" background="" height="20" width="68"></menu><br> <menu name="保存" link="javascript:alert(&apos;保存&apos;)" background="" height="20" width="68"></menu><br> <menu name="退出" link="javascript:alert(&apos;退出&apos;)" background="" height="20" width="68"></menu><br> </menu><br> <menu name="编辑" link="#" background="" height="20" width="68"><br> <menu name="复制" link="javascript:alert(&apos;复制&apos;)" background="" height="20" width="68"></menu><br> <menu name="剪切" link="javascript:alert(&apos;剪切&apos;)" background="" height="20" width="68"></menu><br> <menu name="粘贴" link="javascript:alert(&apos;粘贴&apos;)" background="" height="20" width="68"></menu><br> <menu name="删除" link="javascript:alert(&apos;删除&apos;)" background="" height="20" width="68"></menu><br> </menu><br> <menu name="收藏夹" link="" background="" height="20" width="68"><br> <menu name="Google" link="http://www.google.com" background="" height="20" width="68"></menu><br> <menu name="Yahoo" link="http://www.yahoo.com" background="" height="20" width="68"></menu><br> <menu name="邮箱" link="#" background="" height="20" width="68"><br> <menu name="网易163邮箱" link="http://mail.163.com" background="" height="20" width="98"></menu><br> <menu name="网易126邮箱" link="http://mail.126.com" background="" height="20" width="98"></menu><br> <menu name="Gmail" link="http://www.gmail.com" background="" height="20" width="98"></menu><br> </menu><br> </menu><br> <menu name="帮助" link="#" background="" height="20" width="68"><br> <menu name="访问网站" link="http://www.ayeah.net" background="" height="20" width="68"></menu><br> <menu name="发送邮件" link="mailto:ayeah@21cn.com" background="" height="20" width="68"></menu><br> <menu name="论坛" link="javascript:alert(&apos;论坛&apos;)" background="" height="20" width="68"></menu><br> <menu name="关于" link="javascript:alert(&apos;关于&apos;)" background="" height="20" width="68"></menu><br> </menu><br></menus>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值