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

来源:互联网 发布:db2查看数据库 编辑:程序博客网 时间:2024/06/10 00:48

(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对象

@Overridepublic 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)
响应单击不同选项的事件。

@Overridepublic 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是所选择界面元素的额外信息

@Overridepublic 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>











0 0