如何在Material3中自定义MaterialToolbar及弹出菜单样式?
Material3自定义MaterialToolbar及弹出菜单样式解决方案
1. 定义Toolbar专属主题
在res/values/styles.xml中添加Toolbar的独立主题,单独控制其背景色和图标/标题颜色:
<style name="ToolbarTheme" parent="ThemeOverlay.Material3.ActionBar"> <!-- 设定Toolbar背景色为#1d95fe --> <item name="colorPrimary">#1d95fe</item> <!-- 设定Toolbar图标、标题文字为白色 --> <item name="colorOnPrimary">@android:color/white</item> </style>
2. 定义弹出菜单样式
同样在styles.xml中添加弹出菜单的样式,控制背景和文字颜色:
<style name="PopupMenuStyle" parent="Widget.Material3.PopupMenu"> <!-- 弹出菜单背景色设为白色 --> <item name="android:background">@android:color/white</item> <!-- 菜单文字颜色设为黑色 --> <item name="android:textColor">@android:color/black</item> <!-- 可选:添加分割线样式 --> <item name="android:divider">@android:color/darker_gray</item> <item name="android:dividerHeight">1dp</item> </style>
3. 布局中应用样式
修改MaterialToolbar布局代码,通过app:theme和app:popupTheme分别关联上述两个样式:
<com.google.android.material.appbar.MaterialToolbar android:id="@+id/ToolBar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:title="@string/app_name" app:theme="@style/ToolbarTheme" app:popupTheme="@style/PopupMenuStyle"/>
原理说明
通过app:theme为Toolbar单独设置主题,仅影响Toolbar自身的颜色体系,不会干扰全局主题;再通过app:popupTheme专门控制弹出菜单的样式,彻底解决之前图标颜色与弹出菜单样式冲突的问题,完全基于Material3设计规范实现需求。
内容的提问来源于stack exchange,提问作者user13926345
相关产品推荐
相关产品推荐

