在android中,有以下几种菜单:
1.Options Menu(选项菜单);
效果,在action bar处显示所定义的菜单项。
2.Context Menu(上下文菜单);
效果:长按后弹出菜单窗口在屏幕中央。
3.Popup Menu(弹出框菜单)。
效果:在所绑定的view 的上边或下边显示菜单窗口。
4.contextual Action Mode。(这个我打算另立一篇blog。也比较常用。常用于listView等adapterView里,进行多选,然后同时对多个选项进行操作。)
1.选项菜单。
选项菜单所出现的位置是actionbar。现在主要用来干什么?一般都是用来定义搜索,设置,分享等功能。
如何定义选项菜单?
1.定义menu文件。
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:showAsAction="always" android:title="item"> <menu> <item android:title="menu1"/> <item android:title="menu2"/> </menu> </item></menu>
2.加载menu菜单文件。activity文件:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_4_23, menu); return true; //当你inflate菜单后需要return true,不然不会显示}
3.点击事件处理。
@Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) {<span style="white-space:pre"> </span> case R.id.menu1: Toast.makeText(this, "menu1 has been seleted", Toast.LENGTH_SHORT).show(); return true;<span style="white-space:pre"> </span>//return true 告知系统这里处理了该事件 case R.id.menu2: Toast.makeText(this, "menu2 has been seleted", Toast.LENGTH_SHORT).show(); return true; default: return super.onContextItemSelected(item); } }点击item后效果图:
2.Context Menu 上下文菜单
其实它的使用也是类似与options menu,显示的地方和时间不同罢了。它是在用户长按某个view后弹出的在屏幕中央的菜单框。
定义Context Menu:
1.创建ContextMenu:(activity内)
@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.context_menu_4_23, menu);//看着都一样,通过menuInflater去填充view视图。当然啦,首先还是要定义menu文件的。 }
<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="white-space:pre"> </span>2.定义点击ContextMenu中item的处理方法</span>
@Overridepublic boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu1: Toast.makeText(this, "menu1 has been seleted", Toast.LENGTH_SHORT).show(); return true; case R.id.menu2: Toast.makeText(this, "menu2 has been seleted", Toast.LENGTH_SHORT).show(); return true; default: return super.onContextItemSelected(item); }}
3.为所需要context Menu的View视图注册。
为什么要这么做?当然啦,不然系统怎么知道哪个view需要这个contextView哪个View不需要啊。你或许会想:为什么不默认activity所有View都附加cotext Menu?想想这样的坏处:我不希望一些view有这种想过可是它却默认拥有?例如我只想让listView中的item拥有而已,却连button长按都出现例如delete这样的选项?think about it。
TextView mContextTv =(TextView) findViewById(R.id.contextMenuTv); registerForContextMenu(mContextTv);然后长按该view对象就会出现如下所示画面:
3.PopupMenu(弹出菜单)
它的效果与context menu是类似的,位置显示略有不同,它是出现在绑定的view的附近(上边或下边)。
1.定义menu文件。
2.构建与某个view对象绑定的popup menu对象,填充视图,设置监听器,并显示。
public void showMenu(View v) { PopupMenu popup = new PopupMenu(this, v); // 设置监听器接口,本类实现了该接口。 popup.setOnMenuItemClickListener(this); popup.inflate(R.menu.actions); popup.show(); } @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.archive: archive(item); return true; case R.id.delete: delete(item); return true; default: return false; } }