弹出菜单Android无法正常工作

时间:2019-01-29 15:21:02

标签: android popup popupmenu androidx

我的应用程序中遇到一个特定的错误。我有一个弹出菜单,其中同时使用了文本和图标。升级到较新的Android Studio版本并升级到appcompat-v7:28.0.0后,我注意到弹出菜单中的各项与本文所附的图片类似。

enter image description here

我不明白为什么会这样。我使用下面的代码段强制显示图标。它已经工作了几个月,但直到现在才行不通。

Context wrapper = new ContextThemeWrapper(this, R.style.PopupMenu);
    popup = new PopupMenu(wrapper, v);

    try {
        Field[] fields = popup.getClass().getDeclaredFields();
        for (Field field : fields) {
            if ("mPopup".equals(field.getName())) {
                field.setAccessible(true);
                Object menuPopupHelper = field.get(popup);
                Class<?> classPopupHelper = Class.forName(menuPopupHelper
                        .getClass().getName());
                Method setForceIcons = classPopupHelper.getMethod(
                        "setForceShowIcon", boolean.class);
                setForceIcons.invoke(menuPopupHelper, true);
                break;
            }
        }
    }
    catch (Exception e) {
        //
   }
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.main_popup_menu, popup.getMenu());

    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {

            int id = menuItem.getItemId();
            if (id == R.id.menu_about){
                Display_About_Dialog(SI_IN_ANIM);
            }
            else if (id == R.id.menu_lingua){
                Dialogo_Lingua(SI_IN_ANIM);
            }
            else if (id == R.id.menu_exit){
                finish();
            }
            return false;
        }
    });
    popup.show();

编辑

如果使用

,我注意到了gradle

实现'com.android.support:appcompat-v7:27.1.1'

实现'com.android.support:design:27.1.1'

问题没有出现。

EDIT2

我尝试迁移到AndroidX:结果相同。菜单的每一行都没有正确显示...

编辑3 我找到了自己的解决方案:改为使用反射,我使用了可扩展文本,在其中插入了图标,扩展了ImageSpan类。这样我就能得到想要的东西。

0 个答案:

没有答案