需求需要在toolbar的menu菜单里面显示icon,但是据google的解释说
已经不支持这么做了
Options menus: The icon menus do not support item check marks and only show the item's condensed title. The expanded menus (only available if six or more menu items are visible, reached via the 'More' item in the icon menu) do not show item icons, and item check marks are discouraged.
所以,没办法,还是要解决啊,看了下MenuBuilder的源码,要么用反射
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
setOverflowIconVisible(featureId, menu);
return super.onMenuOpened(featureId, menu);
}
/**
* 显示OverflowMenu的Icon
*
* @param featureId
* @param menu
*/
private 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) {
Log.d("OverflowIconVisible", e.getMessage());
}
}
}
}
要么就采用子菜单的形式
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_settings"
android:icon="@drawable/more"
app:showAsAction="always">
<menu>
<item
android:id="@+id/action_select"
android:icon="@drawable/select"
android:showAsAction="never"
android:title="@string/select" />
<item
android:id="@+id/action_date"
android:icon="@drawable/date"
android:showAsAction="never"
android:title="@string/date" />
<item
android:id="@+id/action_month"
android:icon="@drawable/month"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/month" />
</menu>
</item>
</menu>
建议第二种当然更好!!!
已经不支持这么做了
Options menus: The icon menus do not support item check marks and only show the item's condensed title. The expanded menus (only available if six or more menu items are visible, reached via the 'More' item in the icon menu) do not show item icons, and item check marks are discouraged.
所以,没办法,还是要解决啊,看了下MenuBuilder的源码,要么用反射
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
setOverflowIconVisible(featureId, menu);
return super.onMenuOpened(featureId, menu);
}
/**
* 显示OverflowMenu的Icon
*
* @param featureId
* @param menu
*/
private 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) {
Log.d("OverflowIconVisible", e.getMessage());
}
}
}
}
要么就采用子菜单的形式
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_settings"
android:icon="@drawable/more"
app:showAsAction="always">
<menu>
<item
android:id="@+id/action_select"
android:icon="@drawable/select"
android:showAsAction="never"
android:title="@string/select" />
<item
android:id="@+id/action_date"
android:icon="@drawable/date"
android:showAsAction="never"
android:title="@string/date" />
<item
android:id="@+id/action_month"
android:icon="@drawable/month"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/month" />
</menu>
</item>
</menu>
建议第二种当然更好!!!