Android学习笔记(六):选项菜单,上下文菜单

(1)选项菜单

        显示和当前活动相关的信息,通过单击按下MENU按钮来激活选项菜单。对于携带图标的选项菜单,每次最多只能显示6个,当菜单选项多于6个时,将只显示前5个和一个扩展菜单选项,点击扩展菜单选项(more)将会弹出其余的菜单项。扩展菜单项中将不会显示图标,但是可以显示单选按钮和复选框。
创建一个选项菜单的步骤:
1、覆盖Activity的onCreateOptionsMenu(Menu menu)函数
2、调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标
3、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted(MenuItem item)方法来响应事件
下面先来看下onCreateOptionsMenu()函数
public boolean onCreateOptionsMenu (Menu menu)
函数返回值:布尔值,表示是否显示该函数中设置的菜单
参数:Menu对象

@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		
		super.onCreateOptionsMenu(menu);
		createMenu(menu);
		return true;
	}

onCreateOptionsMenu函数仅在第一次使用菜单时被调用一次。在这个函数我们可以通过Menu对象的add()方法添加菜单子项,这个函数有四个重载函数,下面分别介绍:
public abstract MenuItem add (CharSequence title)
参数说明:指定菜单上的显示文字

public abstract MenuItem add (int groupId, int itemId, int order, int titleRes)

参数说明:groudId:是指组ID,用以批量地对菜单子项进行处理和排序itemId:是子项ID,是每一个菜单子项的唯一标识order:指定菜单子项在选项菜单中的排列顺序titlerRes: 菜单标题的引用public abstract MenuItem add (int titleRes)参数说明:titlerRes: 菜单标题的引用通过string.xml中添加

public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)

这个是最常用的方法参数说明:groudId:是指组ID,用以批量地对菜单子项进行处理和排序itemId:是子项ID,是每一个菜单子项的唯一标识order:指定菜单子项在选项菜单中的排列顺序 title: 菜单标题

public boolean onOptionsItemSeleted(MenuItem item)
响应单击不同选项的事件。

@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		return MenuChoice(item);
	}
辅助方法

private void createMenu(Menu menu)
	{
		MenuItem mnu1 = menu.add(0, 0, 0, "Item1");
		{
			mnu1.setAlphabeticShortcut('a');
			mnu1.setIcon(R.drawable.ic_launcher);
		}
		MenuItem mnu2 = menu.add(0 , 1, 1,"Item2");
		{
			mnu2.setAlphabeticShortcut('b');
			mnu2.setIcon(R.drawable.ic_launcher);
		}
		MenuItem mnu3 = menu.add(0 , 2, 2,"Item3");
		{
			mnu3.setAlphabeticShortcut('c');
			mnu3.setIcon(R.drawable.ic_launcher);
		}
		MenuItem mnu4 = menu.add(0 , 3, 3,"Item4");
		{
			mnu4.setAlphabeticShortcut('d');
			mnu4.setIcon(R.drawable.ic_launcher);
		}
		menu.add(0, 4, 4, "Item5");
	    menu.add(0, 5, 5, "Item6");
	    menu.add(0, 6, 6, "Item7");
	}
	
	private boolean MenuChoice(MenuItem item)
	{
		switch (item.getItemId())
		{
		case 0:
			Toast.makeText(this, "You clicked on Item 1", Toast.LENGTH_SHORT).show();
			return true;
		case 1:
			Toast.makeText(this, "You clicked on Item 2", Toast.LENGTH_SHORT).show();
			return true;
		case 2:
			Toast.makeText(this, "You clicked on Item 3", Toast.LENGTH_SHORT).show();
			return true;
		case 3:
			Toast.makeText(this, "You clicked on Item 4", Toast.LENGTH_SHORT).show();
			return true;
		case 4:
			Toast.makeText(this, "You clicked on Item 5", Toast.LENGTH_SHORT).show();
			return true;
		case 5:
			Toast.makeText(this, "You clicked on Item 6", Toast.LENGTH_SHORT).show();
			return true;
		case 6:
			Toast.makeText(this, "You clicked on Item 7", Toast.LENGTH_SHORT).show();
			return true;
		
		default:
			break;
		}
		return false;
		
	}

(2)上下文菜单

有时候我们也可以叫做快键菜单。例如我们在电脑桌面右键所看到的菜单就是快捷菜单,也叫上下文菜单,叫上下文菜单是因为Context翻译成为上下文的意思。

创建上下文ContextMenu菜单的步骤:
1、  覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项
2、  覆盖onContexItemSelected()方法,响应菜单单击事件
3、  调用registerForContexMenu()方法为实例注册上下文菜单(相当于setOnCreateContextMenuListener()
public void onCreateContextMenu (ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo)
参数说明:
menu:需要显示的快捷菜单
v:V是用户选择的界面元素
menuInfo:menuInfo是所选择界面元素的额外信息

	@Override
	public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInfo)
	{
		super.onCreateContextMenu(menu, view, menuInfo);
		createMenu( menu);
	}
说明:这个onCreateContextMenu与onCreateOptionsMenu函数不一样,onCreateOptionsMenu函数仅在选项菜单第一次启动时被调用一次,而onCreateContextMenu函数在每次启动都将会被调用一次。
public boolean onContextItemSelected (MenuItem item)
这个方法和前面的onMenuItemSelected大同小异,在此就不再多说明了

4.或者用XML创建上下文菜单
需要通过Activity的getMenuInflater()返回一个MenuInflater对象,然后通过MenuInflater对象的inflater()方法指定XML文件的引用
public void inflate (int menuRes, Menu menu)
参数说明:
menuRes:XML文件的引用位置
menu:要显示的菜单

 @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                        ContextMenuInfo menuInfo) {

                                
                //XML方式创建的菜单项
                MenuInflater inflater=getMenuInflater();
                
                inflater.inflate(R.menu.context_menu, menu);

        }
context_menu.xml 文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@+id/contextMenu1" android:title="XML创建的菜单子项1"></item>
        <item android:id="@+id/contextMenu2" android:title="XML创建的菜单子项2"></item>
        <item android:id="@+id/contextMenu2" android:title="XML创建的菜单子项3"></item>
</menu>











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值