Android开发之menu菜单
Android系统里面有四种类型的菜单:optionsmenu(选项菜单),contextmenu(上下文菜单),submenu(子菜单),Popupmenu(弹出菜单)。
首先说选项菜单(OptionsMenu)
一、方法介绍:
publicbooleanonCreateOptionsMenu(Menumenu):使用此方法调用OptionsMenu。
publicbooleanonOptionsItemSelected(MenuItemitem):选中菜单项后发生的动作。
publicvoidonOptionsMenuClosed(Menumenu):菜单关闭后发生的动作。
publicbooleanonPrepareOptionsMenu(Menumenu):选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
publicbooleanonMenuOpened(intfeatureId,Menumenu):单打开后发生的动作。
二、默认样式
默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作IconMenus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作ExpandedMenus。下面介绍。
1.重载onCreateOptionsMenu(Menumenu)方法
@Override publicbooleanonCreateOptionsMenu(Menumenu) { //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. //getMenuInflater().inflate(R.menu.main,menu); menu.add(0,1,1,"设置").setIcon(R.drawable.setting); menu.add(0,3,3,"设置").setIcon(R.drawable.setting); menu.add(0,2,2,"下载").setIcon(R.drawable.download); }
重载onCreateOptionsMenu(Menumenu)方法,并在此方法中添加菜单项,最后返回true,如果false,菜单则不会显示。
注意:
大部分手机上边都会有一个“MENU”键,在一个应用安装到手机上之后,可以通过“MENU”显示该应用关联的菜单。
但是,从Android3.0开始,Android不再要求手机设备上必须提供MENU案件,虽然现在还有很多手机都会提供MENU按键,但是有一部分已经不再提供。在这种情况下,Android推荐使用ActionBar来代替菜单。在以后的博文中我们会介绍Android对ActionBar的支持
4.2上的optionsMenu是放到actionbar上面了,必须要在xml文件中设置showAsAction="always"活着showAsAction="ifRoom"才能在actionbar上显示。只有在actionBar上显示的菜单,才会有图标。要在代码中设置的话,menu.findItem(id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)
2.重载onOptionsItemSelected(MenuItemitem)方法为捕捉菜单项事件
@Override publicbooleanonOptionsItemSelected(MenuItemitem) { //TODOAuto-generatedmethodstub if(item.getGroupId()==0&&item.getItemId()==1) { Intentintent=newIntent(this,SecondActivity.class); startActivity(intent); } else { Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show(); } returnsuper.onOptionsItemSelected(item); }
上下文菜单(ContextMenu)
当用户长按一个控件时时,弹出的菜单我们称为上下文菜单。我们经常在Windows中用鼠标右键单击弹出的菜单就是上下文菜单。
1、重载Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项MenuItem
@Override publicvoidonCreateContextMenu(ContextMenumenu,Viewv, ContextMenuInfomenuInfo) { menu.add(0,1,0,"红色背景"); menu.add(0,2,0,"绿色背景"); menu.add(1,3,0,"白色背景"); //TODOAuto-generatedmethodstub super.onCreateContextMenu(menu,v,menuInfo); }
2、重载onContextItemSelected()方法,响应菜单单击事件
@Override publicbooleanonContextItemSelected(MenuItemitem) { //TODOAuto-generatedmethodstub switch(item.getItemId()){ case1: myText.setBackgroundColor(Color.RED); break; case2: myText.setBackgroundColor(Color.GREEN); break; case3: myText.setBackgroundColor(Color.WHITE); break; } returntrue; }
3、重载registerForContextMenu()方法,为视图注册上下文菜单
privateTextViewmyText; @Override protectedvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myText=(TextView)findViewById(R.id.mytext); registerForContextMenu(myText); }
子菜单(SubMenu)
子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows的“文件”菜单中就有“新建”,“打开”,“关闭”等子菜单。
创建子菜单的方法
1、重载Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法添加子菜单项
2、调用SubMenu的add()饭饭,添加子菜单项
@Override publicbooleanonCreateOptionsMenu(Menumenu) { //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. SubMenusubMenu=menu.addSubMenu(0,4,4,"登录/注册"); subMenu.add(1,1,1,"登录"); subMenu.add(1,2,2,"注册"); returntrue; }
3、重载onOptionsItemSelected(MenuItemitem)方法为捕捉菜单项事件
这个方法有一个MenuItem参数,可以使用其getTitle和getItemId方法来判断单击的是哪个菜单项
publicbooleanonOptionsItemSelected(MenuItemitem){ //TODOAuto-generatedmethodstub if(item.getTitle().equals("登录")) { Log.e("action:","点击了注册/登录"); } returnsuper.onOptionsItemSelected(item); }
SubMenu是Menu的子接口,添加SubMenu后,可以通过SubMenu.add方法添加其子菜单项。在子菜单项上不能显示图像,但可以在子菜单的头部显示图像,不过子菜单项可以带复选框和选项按钮。
注意:子菜单不能再增加子菜单;
弹出菜单(Popup)
该类菜单需要和某个View绑定,当点击该View时在该View的上面或下面(视屏幕空间而定)弹出菜单。
使用方法:
1、建立XML菜单资源文件;
popup.xml
<menuxmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_edit" android:orderInCategory="100" android:showAsAction="never" android:title="edit"/> <item android:id="@+id/action_share" android:orderInCategory="100" android:showAsAction="never" android:title="popup"/> </menu>
2~5步均可在绑定View的点击事件中实现!
2、建立PopupMenu对象,实例化传入上下文context和绑定的View;
3、使用PopupMenu对象的getMenuInflater().inflate()把XML菜单文件压进来,
4、使用PopupMenu对象自身的setOnMenuItemClickListener设置点击事件;
5、使用PopupMenu对象自身的show显示弹出菜单。
publicvoidshowPopuMenu(Viewv) { PopupMenupopup=newPopupMenu(MainActivity.this,v); MenuInflaterinflater=popup.getMenuInflater(); inflater.inflate(R.menu.popup,popup.getMenu()); popup.show(); }
以上内容就是小编给大家介绍的Android开发之menu菜单,希望大家喜欢。