Android PopupMenu簡單使用

額,現在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的使用,不過和這個使用方法也大同小異了~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章