Я сталкиваюсь с определенной ошибкой в моем приложении.У меня есть всплывающее меню, в котором я использую как текст, так и значок.После обновления до более новой версии Android Studio и обновления до appcompat-v7: 28.0.0 я заметил, что элементы моего всплывающего меню выглядят как на изображении, прикрепленном к этому сообщению.
Я не могу понять, почему это произошло.Я заставляю иконки показываться, используя фрагмент ниже.Он работал месяцами, и только в это время он не работает.
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.Таким образом я получаю то, что хочу.