额,现在app里经常要使用弹出菜单,起初我用popupWindow来处理,虽说能处理,但明显不是最适合菜单展示的方式啊,后来改用PopupMenu来实现,发现变得好简单啦,下面给个简单使用例子,相信你很快能看明白:
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private void showPopUpWindow(View anchor) {
PopupMenu popupMenu=new PopupMenu(context,anchor);
popupMenu.inflate(R.menu.menu_groupbuy_actionbar);
setIconEnabled(popupMenu.getMenu());
popupMenu.show();
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.menu_myorder:
OrderListActivity.actionStart(context);
break;
case R.id.menu_search:
SearchActivity.activityStart(context, SearchActivity.SearchableType.GROUP_BUY);
break;
}
return false;
}
});
}
其中,PopupMenu构造方法第二个参数要给一个它的锚点,就是这个menu会以这个view为挂载展开。然后我们把写好的menu的xml用inflate装进去。这里有个setIconEnabled是为了解决现在android4.0以上版本中配置了menu的icon,但是icon不会显示,其方法如下:
private void setIconEnabled(Menu menu) {
try {
Class clazz=Class.forName("com.android.internal.view.menu.MenuBuilder");
Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
m.setAccessible(true);
m.invoke(menu,true);
}catch (Exception e){
e.printStackTrace();
}
}
不过使用时注意了,可能需要SDKAPI在14以上,若要在低版本使用,请参考supportv7包中的PopupMenu的使用,不过和这个使用方法也大同小异了~