ToolBar上添加Menu,除搜索圖標(biāo)外其他的都收起來(lái)。修改ToolBar背景色為深灰色,然后才發(fā)現(xiàn)MenuItem里面的背景色還是原來(lái)白色。
修改顏色后,ToolBar為深灰,有搜索和菜單圖標(biāo)
ToolBar
打開(kāi)菜單后
打開(kāi)后的ToolBar
修改MenuItem背景顏色
原來(lái)res/values/styles.xml
的配置
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorWeChatGray</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
修改后
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorWeChatGray</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionOverflowMenuStyle">@style/optionMenu</item>
</style>
<style name="optionMenu" parent="Widget.AppCompat.ActionBar.Overflow">
<item name="android:popupBackground">@color/colorWeChatGray</item>
</style>
</resources>
這樣MenuItem的背景顏色就修改了
背景色修改
但這看起來(lái)明顯不對(duì)勁:
- 菜單把ToolBar的兩個(gè)圖標(biāo)遮住
- 背景色改變后和文字顏色不協(xié)調(diào)
修改文字顏色
我們先處理文字的顏色,添加android:textColor
和對(duì)應(yīng)的顏色即可
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorWeChatGray</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionOverflowMenuStyle">@style/optionMenu</item>
<item name="android:textColor">@color/colorWhite</item>
</style>
<style name="optionMenu" parent="Widget.AppCompat.ActionBar.Overflow">
<item name="android:popupBackground">@color/colorWeChatGray</item>
</style>
</resources>
修改文字顏色
遮蔽ToolBar圖標(biāo)
遮蔽圖標(biāo)的問(wèn)題比較好解決,
把parent="Widget.AppCompat.ActionBar.Overflow">
的.Overflow
去掉
處理遮蔽
MenuItem圖標(biāo)顯示
上面的圖片中MenuItem的Icon本來(lái)是不顯示的,需要加入以下代碼。在Android 5.0手機(jī)上測(cè)試可以用,Android 4.4及之前的還不清楚。
@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 Exception", e);
}
}
}
return super.onPrepareOptionsPanel(view, menu);
}