官方中ActionBar如果你隱藏了Menu Item,默認(rèn)是不會顯示Icon。雖然官方不支持,但是有時會使用到相關(guān)的效果,所以經(jīng)過無數(shù)次的Google,終于找到了需要的方法和信息。
這個是在CSDN中guolin博主發(fā)現(xiàn)的方法,是利用反射來完成的,具體博客地址在這里
@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可能就不會調(diào)用了,至少對于我是這樣的
接下來我在stackoverflow上面發(fā)現(xiàn)另外的一種解決方法,同樣是使用反射來達(dá)成效果,但是調(diào)用的地方不一樣,如果你是用的是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);
}
寫下來給那些踩到坑的人~~~