Android应用程序的Menu菜单

    Menu菜单对任何应用程序都是非常重要的,Menu菜单提供了具有亲和力的人机交互接口,用户可以容易的操作应用功能和设置相关的属性。Android操作系统提供了非常简便的接口,让开发人员可以容易地使用这些接口来开发标准的菜单程序。

1、选项菜单的使用

1.1 创建选项菜单

    当选项菜单第一次打开时,Android操作系统会调用onCreateOptionsMenu()回调方法来创建选项菜单。有两种方式利用onCreateOptionsMenu()方法来创建每一个操作选项,第一种是在MenuItem上加上add()方法来完成;第二种方法是定义选项菜单的XML文件内容。

(1)通过在MenuItem上加上add()方法来创建选项菜单

public boolean onCreateOptionsMenu(Menu menu) {
	menu.add(0,MENU_ITEM_ID1,0,"MENU_ITEM_1");
	menu.add(0,MENU_ITEM_ID1,0,"MENU_ITEM_2");
	return super.onCreateOptionsMenu(menu);
}
    add()方法的格式和参数说明如下:

public abstract MenuItem add (int groupId, int itemId, int order, int titleRes) 
    groupId:所有操作群组的ID。

    itemId:每一个操作项的ID。

    order:操作项目的安排顺序。

    titleRes:操作项标题。

    在MenuItem上还可以加上其他菜单属性,setIcon()方法可以显示图标,setShortcut()方法可以提供快捷键方法,也可以加上intent和设置功能。如:

menu.add(0,MENU_ITEM_ID1,0,"MENU_ITEM_1").setIcon(R.drawable.ic_launcher);
(2)通过定义选项菜单的XML文件内容来创建选项菜单
    这里所规划option_menu.XML文件存放在“res/menu”目录。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/new_item1"
        android:title="MENU_TITLE_1"/>
    <item android:id="@+id/new_item2"
        android:title="MENU_TITLE_2"/>
</menu>
    使用MenuInflater.inflate()方法来扩展这个XML资源,进而创建选项菜单。

public boolean onCreateOptionsMenu(Menu menu) {
	MenuInflater mflater=new MenuInflater(this);
	mflater.inflate(R.menu.options_menu, menu);
	return super.onCreateOptionsMenu(menu);
}
1.2 处理选项菜单选项

    当从选项菜单选定一个选项时,Android操作系统会去调用onOptionsItemSelected()方法,这个回调程序对被选到的项目MenuItem会传送相关信息,比如itemid和groupid,可以用getItemId()方法取得itemid,或用getGroupId()方法取得groupid。

public boolean onOptionsItemSelected(MenuItem item) {
	// TODO Auto-generated method stub
	return super.onOptionsItemSelected(item);
}
2、上下文菜单的使用
    上下文菜单和在个人计算机上单击鼠标右键的功能相类似,会跳出一个选项菜单。当某一个视图(View)登记上一个上下文菜单时,长时间的(维持2秒以上)单击一个视图时会跳出一个浮动式上下文菜单。

    上下文菜单不支持快捷键方式和图标功能。

2.1 创建上下文菜单 onCreateContextMenu()方法

public void onCreateContextMenu(ContextMenu menu, View v,
		ContextMenuInfo menuInfo) {
	// TODO Auto-generated method stub
	super.onCreateContextMenu(menu, v, menuInfo);
	menu.add(0,1000,0,"浏览");
	menu.add(0,1001,0,"编辑");
	menu.add(0,1002,0,"删除");
}
2.2 登记上下文菜单 registerForContextMenu(view)
registerForContextMenu(view);
2.3 处理上下文菜单的选项 onContextItemSelected(MenuItem item)
public boolean onContextItemSelected(MenuItem item) {
	// TODO Auto-generated method stub
	return super.onContextItemSelected(item);
}
3、项目案例
3.1 XML形式创建选项菜单
(1)创建options_menu.xml文件存放在“res/menu”目录。

<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 足球类新闻 -->
    <group 
        android:id="@+id/footballGroup"
        android:visible="true">
        <item
            android:id="@+id/fm_item1"
            android:icon="@drawable/ic_launcher"
            android:orderInCategory="1"
            android:title="英超">
            <!-- 子菜单 -->
            <menu>
                <item 
                    android:id="@+id/sub_item1"
                    android:title="曼联"/>
                <item 
                    android:id="@+id/sub_item2"
                    android:title="阿森纳"/>
                <item 
                    android:id="@+id/sub_item3"
                    android:title="切尔西"/>
                <item 
                    android:id="@+id/sub_item4"
                    android:title="利物浦"/>
            </menu>
        </item>
        <item
            android:id="@+id/fm_item2"
            android:icon="@drawable/ic_launcher"
            android:orderInCategory="2"
            android:title="西甲">
            <!-- 子菜单 -->
            <menu>
                <item 
                    android:id="@+id/sub_item5"
                    android:title="皇家马德里"/>
                <item 
                    android:id="@+id/sub_item6"
                    android:title="巴塞罗那"/>
            </menu>
        </item>
        <item
            android:id="@+id/fm_item3"
            android:icon="@drawable/ic_launcher"
            android:orderInCategory="3"
            android:title="意甲"/>
        <item
            android:id="@+id/fm_item4"
            android:icon="@drawable/ic_launcher"
            android:orderInCategory="4"
            android:title="德甲"/>
        <item
            android:id="@+id/fm_item5"
            android:icon="@drawable/ic_launcher"
            android:orderInCategory="5"
            android:title="法甲"/>
    </group>
    
    <!-- 篮球类新闻 -->
    <group 
        android:id="@+id/basketballGroup"
        android:visible="true">
        <item
            android:id="@+id/bm_item1"
            android:icon="@drawable/ic_launcher"
            android:orderInCategory="6"
            android:title="NBA" />
        <item
            android:id="@+id/bm_item2"
            android:icon="@drawable/ic_launcher"
            android:orderInCategory="7"
            android:title="CBA" />
    </group>
</menu>  
(2)使用onCreateOptionsMenu(Menu menu)回调方法创建菜单

public boolean onCreateOptionsMenu(Menu menu) {
	// TODO Auto-generated method stub
	MenuInflater mflater=new MenuInflater(this);
	mflater.inflate(R.menu.options_menu, menu);
	return super.onCreateOptionsMenu(menu);
}
(3)使用onOptionsItemSelected(MenuItem item)回调方法处理菜单项点击事件

public boolean onOptionsItemSelected(MenuItem item) {
	if(!item.hasSubMenu())
	{
		String itemid = Integer.toString(item.getItemId());
		String title = item.getTitle().toString();
		String message = String.format("选项ID:%s \n 标题:%s", itemid,title);
		ShowAlertDialog(message);
	}
	return super.onOptionsItemSelected(item);
}

private void ShowAlertDialog(String message)
{
	AlertDialog.Builder builder = new AlertDialog.Builder(this);
	builder.setTitle("选择选项");
	builder.setMessage(message);
	builder.setPositiveButton("关闭", null);
	builder.show();	
}

3.2 给LiveVIew列表添加上下文菜单
(1)页面加载时,给ListView视图添加数据,并给ListView视图登记上下文菜单

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    //创建5个用户信息列表
	CharSequence[] list = {
		"Peter",
		"Ken",
		"Anne",
		"Kevin",
		"Tom",
	};
	//将5个用户信息放置在ListView01
	ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this,android.R.layout.simple_expandable_list_item_1,list);
	ListView listView = (ListView)findViewById(R.id.listView1);
	listView.setAdapter(adapter);
	registerForContextMenu(findViewById(R.id.listView1));  //给视图(View)登记上下文菜单
}
(2)使用onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo)回调方法创建上下文菜单

public void onCreateContextMenu(ContextMenu menu, View v,
		ContextMenuInfo menuInfo) {
	// TODO Auto-generated method stub
	super.onCreateContextMenu(menu, v, menuInfo);
	menu.add(0,1000,0,"浏览");
	menu.add(0,1001,0,"编辑");
	menu.add(0,1002,0,"删除");
}
(3)使用onContextItemSelected(MenuItem item)回调方法处理菜单项点击事件
public boolean onContextItemSelected(MenuItem item) {
	// TODO Auto-generated method stub
	String title = item.getTitle().toString();
	String message = String.format("你的选择:%s", title);
	ShowAlertDialog(message);
	return super.onContextItemSelected(item);
}
	
private void ShowAlertDialog(String message)
{
	AlertDialog.Builder builder = new AlertDialog.Builder(this);
	builder.setTitle("选择选项");
	builder.setMessage(message);
	builder.setPositiveButton("关闭", null);
	builder.show();	
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pan_junbiao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值