处女男学Android(十二)---Android 菜单(Menu)详解与应用



一、前言



转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42170771

本篇blog将记录一下Android中菜单的使用方法,虽然在新版本中推荐使用ActionBar去替代菜单,但我认为菜单依然是挺不错的一种UI交互组件,比ActionBar好点一些,对于手指不灵活的人比起来ActionBar右上角的那个方块小按钮,或许ta会更喜欢Menu呢,废话不多说,下面就具体介绍一下Android中关于Menu的使用方法。



二、创建第一个菜单



菜单有两种创建方式,分别是:

  • 通过Java代码创建菜单对象。
  • 通过xml资源文件定义菜单。

这里我想也不必多说,肯定应该选择第二种形式,在Activity中写代码去创建菜单必然导致程序代码过于臃肿,而且也不易查看和维护,而第二种方法既容易观察菜单的结构,也降低了耦合性,下面是官方给出的将“Using a menu resource”作为最佳实践的理由,简单看一下:


所以我这里就不浪费篇幅去记录“通过代码去创建菜单”了,主要记录一下如何通过xml文件定义菜单资源以及如何在Activity中引用并设置以及使用菜单。


菜单的资源文件通常应该放在/res/menu目录下,菜单资源的根元素通常是<menu.../>元素,并且它不需要指定任何属性,仅是菜单资源文件的根标签而已。我们在eclipse中新建一个Android工程,在/res/menu下去new一个Menu Resource,可以看到Menu的基本结构:


可以看到<menu.../>元素内可包含的子元素:

  • <group></group>
  • <item/>
下面分别说明一下这两个标签的用法和属性,首先是最常用的<item/>,<item/>元素用于定义一个菜单项,<item/>元素中又可以包含新的<menu/>,而位于<item/>中的<menu/>自然就代表了指定<item/>的子菜单了。下面先看一下<item/>可指定的常用属性:


通常我们必须指定的属性只有一个,就是android:title,其余的属性都是可选的,这里我们创建的第一个菜单简单一些,只给出id和title即可:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/item_1"
        android:title="title1"/>
    <item
        android:id="@+id/item_2"
        android:title="title2"/>
    <item
        android:id="@+id/item_3"
        android:title="title3"/>
    <item
        android:id="@+id/item_4"
        android:title="title4"/>
    <item
        android:id="@+id/item_5"
        android:title="title5"/>
    <item
        android:id="@+id/item_6"
        android:title="title6"/>

</menu>

写好了资源文件之后,在Activity中需要重写onCreateOptionsMenu去加载菜单,加载方式也很简单,通过MenuInflater的inflate方法即可加载菜单,完全类似于我们LayoutInflater的用法。关于菜单Item的点击事件需要在Activity中重写onOptionsItemSelected,根据回调参数来判断不同的Item从而进行不同的处理,其实这些在新建Activity之后都会自动生成的,下面贴上这两个方法的代码,很简单:
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.my_menu, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		switch (id) {
		case R.id.item_1:
			Toast.makeText(this, "item_1 has been clicked!", Toast.LENGTH_SHORT)
					.show();
			;
			break;
		case R.id.item_2:
			Toast.makeText(this, "item_2 has been clicked!", Toast.LENGTH_SHORT)
					.show();
			break;
		case R.id.item_3:
			Toast.makeText(this, "item_3 has been clicked!", Toast.LENGTH_SHORT)
					.show();
			break;
		case R.id.item_4:
			Toast.makeText(this, "item_4 has been clicked!", Toast.LENGTH_SHORT)
					.show();
			break;
		case R.id.item_5:
			Toast.makeText(this, "item_5 has been clicked!", Toast.LENGTH_SHORT)
					.show();
			break;
		case R.id.item_6:
			Toast.makeText(this, "item_6 has been clicked!", Toast.LENGTH_SHORT)
					.show();
			break;
		}
		return true;
	}
最后看一下运行效果:



三、选项菜单(Options menu)和上下文菜单(Context menu)


google将菜单按功能特性分为了三种,分别是:选项菜单(Options menu)、上下文菜单(Context menu)以及弹出式菜单(Popup menu),现在就分别介绍一下前两个:选项菜单和上下文菜单。

a.选项菜单(Option menu)

首先看一下官方文档中对option menu的简介:
————————————————————————————

————————————————————————————
简单翻译一下,“选项菜单”是一个Activity中主要的菜单项的集合,在它上面应该放置有全局性影响的功能,例如:“搜索”、“写邮件”和“设置”。说到这里我们差不多应该就能对号入座了选项菜单了,安卓系统就自带了“选项菜单”&#x
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值