Всплывающее меню Android не работает правильно - PullRequest
0 голосов
/ 29 января 2019

Я сталкиваюсь с определенной ошибкой в ​​моем приложении.У меня есть всплывающее меню, в котором я использую как текст, так и значок.После обновления до более новой версии 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();

EDIT

Я заметил, что в gradle, если я использую реализацию

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

реализация' com.android.support:design:27.1.1'

проблема не появляется.

EDIT2

Я пытался перейти на AndroidX: те же результаты.Каждая строка меню отображается неправильно ...

РЕДАКТИРОВАТЬ 3 Я нашел свои собственные решения: вместо того, чтобы использовать отражение, я использовал расширяемый текст, в который я вставляю значок, расширяющий класс ImageSpan.Таким образом я получаю то, что хочу.

...