如何在Android XML中引用Material Design 3的Tokens/颜色
在Android XML中使用Material Design 3动态颜色与Design Tokens
1. 确认主题已启用Dynamic Colors
你的主题必须继承支持动态颜色的Material 3主题,或者手动开启动态颜色功能:
<!-- res/values/styles.xml --> <style name="AppTheme" parent="Theme.Material3.DynamicColors.DayNight"> <!-- 自定义主题配置 --> <item name="colorPrimary">@color/md_theme_light_primary</item> <item name="colorOnPrimary">@color/md_theme_light_onPrimary</item> <!-- 如需手动覆盖Token,可在此引用系统Token或自定义颜色 --> <item name="colorSurfaceContainer">@color/md_sys_color_surface_container</item> </style>
如果是自定义主题未直接继承动态主题,需添加以下配置开启动态颜色:
<item name="android:enableDynamicColors">true</item>
2. 在布局XML中引用主题属性
Material 3已将Design Tokens映射为主题属性,无需直接写md.sys.color.surface-container,直接使用对应的?attr/引用即可:
示例:给布局设置Surface Container背景
<!-- res/layout/your_layout.xml --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/colorSurfaceContainer"> <!-- 子View内容 --> </LinearLayout>
常用Surface系列Token与主题属性对应关系:
md.sys.color.surface→?attr/colorSurfacemd.sys.color.surface-container-low→?attr/colorSurfaceContainerLowmd.sys.color.surface-container-high→?attr/colorSurfaceContainerHigh
3. 验证动态效果
运行应用后,系统主题(浅色/深色切换)或动态颜色(基于壁纸变化)更新时,View背景会自动同步切换,实现动态效果。
注意事项
- 确保项目依赖最新版Material 3库:
implementation 'androidx.material:material:1.11.0' // 或更高版本 - 如需自定义Token颜色值,可在
res/values/colors.xml中定义后,在主题里引用覆盖默认动态值:<color name="md_sys_color_surface_container">#...</color>
内容的提问来源于stack exchange,提问作者Mustansar Saeed
相关产品推荐
相关产品推荐

