转 https://blog.csdn.net/zhyh1986/article/details/51810803
背景:
更改menu 背景主题:
1. 设置toolbar.xml 中代码
app:popupTheme="@style/AppTheme.PopupOverlay"
android:theme="@style/ToolbarPopupTheme"
2 在style中添加一个新的style格式(values/style 下)
<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark">
<item name="overlapAnchor">false</item> <!--设置不覆盖锚点-->
<item name="android:dropDownVerticalOffset">4dp</item>
<item name="android:layout_marginRight">4dp</item>
<item name="android:popupBackground">@color/colorPrimary</item> <!--更改背景颜色-->
</style>
3.在AppTheme中添加(另一个style目录下values-v21/style 下)
<item name="actionOverflowMenuStyle">@style/ToolbarPopupTheme</item>
图标:
活动添加一个方法;利用反射更改其属性,让其可以显示图标(默认不能更改)
private void setIconsVisible(Menu menu, boolean flag) {
//判断menu是否为空
if(menu != null) {
try {
//如果不为空,就反射拿到menu的setOptionalIconsVisible方法
Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
//暴力访问该方法
method.setAccessible(true);
//调用该方法显示icon
method.invoke(menu, flag);
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后在 public boolean onCreateOptionsMenu(Menu menu)方法中调用方法 setIconsVisible(menu,true);
在在对应的menu.xml中添加对的icon.
注:在toolbar上的菜单默认显示图标,在menu里面的(三个点里面的)默认不显示,需要通过发射机制更改。
完。