額,現在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的使用,不過和這個使用方法也大同小異了~