我的应用程序中遇到一个特定的错误。我有一个弹出菜单,其中同时使用了文本和图标。升级到较新的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();
编辑
如果使用
,我注意到了gradle实现'com.android.support:appcompat-v7:27.1.1'
实现'com.android.support:design:27.1.1'
问题没有出现。
EDIT2
我尝试迁移到AndroidX:结果相同。菜单的每一行都没有正确显示...
编辑3 我找到了自己的解决方案:改为使用反射,我使用了可扩展文本,在其中插入了图标,扩展了ImageSpan类。这样我就能得到想要的东西。