首页 > 代码库 > 第二章 吸引你的眼球—UI编程(8)
第二章 吸引你的眼球—UI编程(8)
2.4 Menu键的呼唤—Menu菜单
使用Android手机的朋友应该对手机的“Menu”键都不陌生吧。它使用起来方便、快捷,不需要占用应用的界面,正因为它的这些特性,我们现在有很多的应用都使用了Menu-菜单键。
Menu菜单有好几种类型,它们各有各的展现形式,分别使用在不同的场合,以下我们逐一对它们进行介绍。
1)普通的Menu(选项菜单)
这是我们平时使用最多、也是最常见的菜单,它就是当用户单击设备上的菜单按键时弹出的菜单。它最多只能显示6个,超过6个则第六个自动显示“更多”选项来展开显示。它的创建也很简单,在Activity中覆盖onCreateOptionsMenu(Menu menu)方法。
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 1, 1, "添加"); menu.add(0, 2, 2, "删除"); return super.onCreateOptionsMenu(menu); } |
在Menu的add方法中有四个参数:
第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。
第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。
第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
第四个String类型的title参数,表示选项中显示的文字。
按下Menu键后效果如图2-24所示:
图2-24 普通Menu的使用
当然,我们也可以给每一个菜单项设置单独的图标:
menu.add(0, 1, 1, "添加").setIcon(R.drawable.add_no); menu.add(0, 2, 2, "删除").setIcon(R.drawable.reduce_no); |
效果如图2-25所示:
图2-25 Menu添加图标
这样就有了“添加”和“删除”两个菜单选项。如果要添加点击事件,则要覆盖onOptionsItemSelected(MenuItem item)方法。
@Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId() == 1){ Toast t = Toast.makeText(this, "你选的是添加菜单", Toast.LENGTH_SHORT); t.show(); } else if(item.getItemId() == 2){ Toast t = Toast.makeText(this, "你选的是删除菜单", Toast.LENGTH_SHORT); t.show(); } return true; } |
2)SubMenu(子菜单)
如果刚才介绍的Menu为第一级按钮的话,SubMenu就是第二级按钮,它是将相同功能的分组进行多级显示的菜单。
SubMenu的使用也同样简单,在第一段代码onCreateOptionsMenu(Menu menu)方法中加入几句,成下面这样:
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 1, 1, "添加"); menu.add(0, 2, 2, "删除"); SubMenu subMenu = menu.addSubMenu(0, 3, 3, "修改"); subMenu.add(1, 4, 1, "用户名修改"); subMenu.add(1, 5, 2, "密码修改"); return true; } |
点击“修改”后就会出现子菜单,有两个子选项,分别是“用户名修改”和“密码修改”,效果如图2-26所示:
图2-26 子菜单的使用
3)Context Menu(上下文菜单)
Context Menu类似于电脑上的右键,长按某个View之后弹出来的菜单。我们也来举个简单的例子加以说明。
首先在布局文件中定义一个按钮:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/test" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我的按钮"/> </RelativeLayout> |
然后我们在该Activity的onCreate方法里对这两个按钮进行注册,代码如下:
private Button myButton;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myButton = (Button) findViewById(R.id. my_button1); registerForContextMenu(myButton); } |
注册好了之后,我们就可以覆盖onCreateContextMenu方法,在这方法中实现b1和b2两个按钮的长按事件,代码如下:
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { if(v== myButton){ Toast.makeText(DialogActivity.this, "长按事件", Toast.LENGTH_SHORT).show(); } super.onCreateContextMenu(menu, v, menuInfo); } |
我们长按按钮来看看效果,如图2-27所示:
图2-27 上下文菜单的使用
我们使用的主要就是以上三种菜单,它们各有各的特点,应用在不同的场合。
其实很多时候,我们比不是通过“硬编码”来创建菜单的,而是采用xml文件的方式。这种方式可以使代码和文件分离开来,使代码整个看上去更加的清晰。创建起来也相当的方便、快捷。下面我们也举一个简单的例子加以说明。
首先要在res/目录下建一个文件夹,名为menu,接着在该文件夹下建一个名为menu_xml_file.xml的xml文件,代码如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/grout_main"> <item android:id="@+id/menu_1" android:title="Menu1"/> <item android:id="@+id/menu_2" android:title=" Menu2" /> </group> </menu> |
在Activity中覆盖onCreateOptionsMenu(Menu menu)方法,代码如下:
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_xml_file, menu); return true; } |
这样Menu菜单就创建好了,效果如图2-28所示:
图2-28 xml文件创建菜单
和之前一样,我们也可以通过ID监听它们的点击事件。
第二章 吸引你的眼球—UI编程(8)