android-----关于Menu

Android支持的菜单有:

1、选项菜单(OptionsMenu)

2、上下文菜单(ContextMenu)

3、子菜单(SubMenu)


选项菜单(OptionsMenu)的用法

当一个选项菜单中还有菜单时,就要用到子菜单(SubMenu)

@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);
    	super.onCreateOptionsMenu(menu);
    	menu.add(0, Menu.FIRST, 1, "现在显示按钮1").setIcon(R.drawable.ic_launcher);
    	menu.add(0, Menu.FIRST+1, 2, "现在显示按钮2").setIcon(R.drawable.ic_launcher);
    	//menu.add(0, Menu.FIRST+2, 3, "OptionsMenu3").setIcon(R.drawable.ic_launcher);
    	menu.add(0, Menu.FIRST+3, 4, "OptionsMenu4").setIcon(R.drawable.ic_launcher);
    	menu.add(0, Menu.FIRST+4, 5, "OptionsMenu5").setIcon(R.drawable.ic_launcher);
    	menu.add(0, Menu.FIRST+5, 6, "OptionsMenu6").setIcon(R.drawable.ic_launcher);
    	menu.add(0, Menu.FIRST+6, 7, "OptionsMenu7").setIcon(R.drawable.ic_launcher);
    	menu.add(0, Menu.FIRST+7, 8, "OptionsMenu8").setIcon(R.drawable.ic_launcher);
    	
    	//向OptionsMenu3中添加子菜单
    	SubMenu subMenu = menu.addSubMenu(1, Menu.FIRST+2 , 3, "OptionsMenu3");
    	//子菜单是菜单的子类,所以增加菜单项方式一样
        subMenu.add(1, 1, 3,"Sub.1");
        subMenu.add(1, 2, 1,"Sub.2").setIcon(R.drawable.ic_launcher);
        subMenu.add(1, 3, 2,"Sub.3");   
        //默认第一个显示
        SubMenu subsub = subMenu.addSubMenu("subInSub");
        subsub.add("sub.sub.1");
        subsub.add("sub.sub.2");    
    	/**
    	 * true 显示
    	 * false 不显示
    	 */
        return true;
    }

若要在菜单项中显示图片,可以用setIcon()方法。需要注意的是:我用的是android4.2.1的版本,若单单调用setIcon() 方法还是不能再菜单项中显示图片的,要显示图片需要在

清单文件中的<activity>加上:

android:theme="@android:style/Theme.Light"
经过百度,原因解释如下:

对于Android 4.0以上,系统缺省的UI风格有所变化,如果我们仍希望采用原有的显示方式,可以通过为Activity设置theme,指定风格,经过测试,Theme以及Theme.Light均可以使用旧的菜单风格,而Theme.Holo不行。

没有加上面的主题,运行结果如下:


点击OptionsMenu3进入如下:

再点击subInSub进入

若加上上面的主题后,运行效果如下:


通过比较发现,加上了上面的主题后,不仅菜单项中的图片显示了,而且若菜单项多于6个,剩下的菜单项则可以通过更多菜单项显示。并且没加主题时是以列表的形式全部显示的,加了主题后是通过表格形式显示的,但是通过更多菜单项显示的菜单并不显示图片。



上下文菜单(ContextMenu)

 @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
    		ContextMenuInfo menuInfo) {
    	super.onCreateContextMenu(menu, v, menuInfo);
    	menu.add(1, 1, 1, "上下文菜单1").setIcon(R.drawable.ic_launcher);
    	menu.add(1, 2, 3, "上下文菜单2");
    	menu.add(1, 3, 2, "上下文菜单3");
    	
    }

除了手动添加上下文菜单选项,同样也可以通过xml文件来添加上下文菜单选项,方式如下:

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

contextmenu_layout.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/contextmenu1" android:title="上下文菜单1"/>
    <item android:id="@+id/contextmenu2" android:title="上下文菜单2"/>
    <item android:id="@+id/contextmenu3" android:title="上下文菜单3"/>

</menu>
上下文菜单通常与可视组件绑定一起使用,绑定的方法registerForContextMenu(),代码如下:

button=(Button) findViewById(R.id.button3);
registerForContextMenu(button);

长按button,运行效果如下:

通过运行效果可以看出,“上下文菜单1”中并没有显示图片。原来:

在Android支持的菜单中,只有选项菜单的菜单项可以显示图像,上下文菜单和子菜单的菜单头可以显示图像,但是菜单项不能显示图像。


相应菜单项单击事件的方法:

1、onMenuItemClick

2、onOptionsItemSelected

3、onMenuItemSelected


菜单项与Activity的关联

在菜单项中除了可以用java代码显示的打开一个activity外,还可以将activity于菜单项进行关联。代码如下:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem addMenuItem=menu.add(2,1,1,"菜单项");
        addMenuItem.setIntent(new Intent(this,OtherActivity.class));
        return true;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值