自己创建Menu对象,在onCreateOptionsMenu()之外inflate menus.xml

menu对象是activity默认提供的,但它只能在oncreateOptionsMenu()中使用,如果我们需要平板开发,希望在fragment中也能创建menu菜单,就需要我们自己手动创建menu对象。

Menu menu =// How to create an instance !? 
new MenuInflater(context).inflate(R.menu.my_menu, menu)

有两种解决方案:

一:

 使用ActionbarSherlock 中的Menu系列api:

Menu menu = new MenuBuilder(context);

或者干脆,自己写一个MenuBuilder。

二:

通过反射机制调用android内核类:

public Menu newMenuInstance(Context context) {
    try {
        Class<?> menuBuilderClass = Class.forName("com.android.internal.view.menu.MenuBuilder");

        Constructor<?> constructor = menuBuilderClass.getDeclaredConstructor(Context.class);

        return (Menu) constructor.newInstance(context);

    } catch (Exception e) {e.printStackTrace();}

    return null;
}

来源:

http://stackoverflow.com/questions/14118820/how-to-create-a-menu-instance-programmatically-i-e-inflate-a-menu-outside-oncr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在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、付费专栏及课程。

余额充值