overflow menu的几个Item都不显示icon 贴一部分menu
<item android:id="@+id/action_zone"
android:title="@string/zone"
android:orderInCategory="90"
android:icon="@mipmap/biz_forum_author_icon"
app:showAsAction="always" />
<item android:id="@+id/action_share"
android:orderInCategory="90"
android:title="action_share"
app:showAsAction="always"/>
<item android:id="@+id/action_weather"
android:title="人之初"
android:orderInCategory="100"
android:icon="@mipmap/biz_main_menu_weather"
app:showAsAction="never"/>
<item android:id="@+id/action_offline"
android:title="性本善"
android:orderInCategory="100"
android:icon="@mipmap/biz_main_menu_offline"
app:showAsAction="never"/>
可以看到,每个Item都添加了
icon android:icon=”@mipmap/biz_main_menu_offline”
然而都不显示
解决方案
1.这个方案虽然没有解决我的问题,依旧不显示,但是解决了其他人的问题
/**
* 利用反射让隐藏在Overflow中的MenuItem显示Icon图标
* @param featureId
* @param menu
* onMenuOpened方法中调用
*/ public static void setOverflowIconVisible(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) { }
}
}
}
然后在这里调用即可
//显示溢出图标
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
setOverflowIconVisible( featureId, menu);
return super.onMenuOpened(featureId, menu);
}
2.后来尝试的一些方案就不说了,直接上可用的方案(解决我问题的)
//解决ICON不显示
@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(), "unable to set icons for overflow menu", e);
}
}
}
return super.onPrepareOptionsPanel(view, menu);
}