Android弹出菜单未加载菜单

时间:2017-02-11 09:06:44

标签: android android-optionsmenu android-popupwindow

在我的Android应用程序中,我有一个菜单选项,当设备具有专用硬件菜单选项时可以使用。对于另一个设备我没有专门的菜单按钮,所以我尝试添加一个按钮,点击该弹出窗口将显示菜单,弹出窗口正在工作,但没有显示选项,并进一步说明如何工作选定的弹出选项。

我的按钮布局如下:

<ImageButton
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/ic_overflow_holo_dark"
    android:contentDescription="@string/descr_overflow_button"
    android:onClick="showPopup" />

这是我显示弹出窗口的代码:

public boolean showPopup(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.emailmenu, popup.getMenu());
    popup.show();
    return true;
} 

这是我的option代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/bluebutton" android:icon="@drawable/icon_blue_btn"
        android:title="" />
    <item android:id="@+id/zephyr" android:icon="@drawable/icon_zephyrme"
        android:title="" />
    <item android:id="@+id/skype" android:icon="@drawable/icon_skype"
        android:title="" />
</menu>

我已准备好使用onCreateOptionsMenu()来触发专用菜单键中的选项。如何从弹出窗口开始工作。

2 个答案:

答案 0 :(得分:1)

如果您想显示图标而不是标题,请创建您的PopupMenu,如下所示

方法setForceShowIcon(menu);会强制PopMenu显示图标。 你也可以用带图标的文字。

private void showPopupMenu(){
    PopupMenu menu=new PopupMenu(this,anchorView);
    menu.getMenuInflater().inflate(R.menu.popup_menu,menu.getMenu());
    setForceShowIcon(menu);
    menu.setOnMenuItemClickListener(menuClickListner);
    menu.show();
}

 public static void setForceShowIcon(PopupMenu popupMenu) {
    try {
        Field[] fields = popupMenu.getClass().getDeclaredFields();
        for (Field field : fields) {
            if ("mPopup".equals(field.getName())) {
                field.setAccessible(true);
                Object menuPopupHelper = field.get(popupMenu);
                Class<?> classPopupHelper = Class.forName(menuPopupHelper
                        .getClass().getName());
                Method setForceIcons = classPopupHelper.getMethod(
                        "setForceShowIcon", boolean.class);
                setForceIcons.invoke(menuPopupHelper, true);
                break;
            }
        }
    } catch (Throwable e) {
        e.printStackTrace();
    }
}
//This is Menu click listner
PopupMenu.OnMenuItemClickListener menuClickListner = new PopupMenu.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.some_id1:
                //actions here
                break;
            case R.id.some_id2:
                //actions here..
                break;
            case R.id.some_id3:
                break;
           }
        return false;
    }
};

希望这有帮助!

答案 1 :(得分:0)

试试这个

PopupMenu popup = new PopupMenu(MainActivity.this, button1);
 popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
 popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                startActivity(new Intent(MainActivity.this, SecounActivity.class));
                return true;
            }
        });
popup.show();