這就是問題所在
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);
}
終于解決了