更改默认menu颜色
定制一个style,永远更改默认背景颜色
<style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
<item name="overlapAnchor">false</item>
<item name="android:dropDownVerticalOffset">4dp</item>
<item name="android:layout_marginRight">4dp</item>
<item name="android:popupBackground">@color/color_green</item>
</style>
在我们当前主题中引入
<item name="actionOverflowMenuStyle">@style/OverflowMenu</item>
android:popupBackground所引用的资源可以是颜色也可以是drawable资源,也可以是图片
使menu显示图标
在menu/main.xml菜单文件中为每个menu设置图标
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:icon="@mipmap/menu_group_icon"
android:id="@+id/action_group_chat"
android:title="@string/menu_group_chat" />
<item
android:icon="@mipmap/menu_add_icon"
android:id="@+id/action_add_friend"
android:title="@string/menu_addfriend" />
<item
android:icon="@mipmap/menu_scan_icon"
android:id="@+id/action_scan"
android:title="@string/menu_scan" />
<item
android:icon="@mipmap/menu_feedback_icon"
android:id="@+id/action_feedback"
android:title="@string/menu_feedback" />
</menu>
然后我们需要通过反射将图标显示出来,在我们的主Activity中添加如下代码
/**
* 通过反射,设置menu显示icon
*
* @param view
* @param menu
* @return
*/
@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
if (menu != null) {
if (menu.getClass() == MenuBuilder.class) {
try {
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
}
}
}
return super.onPrepareOptionsPanel(view, menu);
}