今天开发一个APP,需要在menu的item中显示icon,可是设置了icon始终都不显示,接着就网站查,查了好多都是没用的,所以下载把我处理的结果记录下来,免得以后忘记:
这个是在CSDN中guolin博主发现的方法,是利用反射来完成的,具体博客地址在这里
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
}
}
}
return super.onMenuOpened(featureId, menu);
}
如果你是使用的AppCompactActivity,这里的onMenuOpen可能就不会调用了,至少对于我是这样的
接下来我在stackoverflow上面发现另外的一种解决方法,同样是使用反射来达成效果,但是调用的地方不一样,如果你是用的是AppCompactActivity,可以使用下面的方法
@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
if (menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try{
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
Log.e(getClass().getSimpleName(), "onMenuOpened...unable to set icons for overflow menu", e);
}
}
}
return super.onPrepareOptionsPanel(view, menu);
}
问题解决了,可以显示出来了。