【问题标题】:Android Material Toolbar surface color looks different on two different toolbarsAndroid Material Toolbar 表面颜色在两个不同的工具栏上看起来不同
【发布时间】:2020-09-19 19:19:27
【问题描述】:

我正在尝试将材质工具栏的背景颜色更改为表面颜色:

android:background="?attr/colorSurface"

按预期工作(为了简化它,我直接在视图中设置背景颜色,并没有为此创建自定义样式)。为了为明暗模式定义多种颜色,我创建了两个 colors.xml 文件。在光照模式下,应用的表面颜色看起来像预期的那样:

但是当我更改为暗模式时,两个工具栏看起来像这样(仍然都引用相同的颜色资源):

右侧工具栏的背景颜色正确,左侧没有。

然后我检查了我在暗模式下定义的每种颜色是否发生相同的情况,因此我将表面颜色更改为我的原色。在黑暗模式下,它看起来像这样:

所以在这种情况下,颜色看起来是一样的,但是当我使用我的表面颜色时,它不会。

我也试过把Widget.MaterialComponents.Toolbar.Surface工具栏改成Widget.MaterialComponents.Toolbar,结果还是一样。

【问题讨论】:

  • 检查Elevation Overlays。您应该在 MaterialToolbar 中使用 Widget.MaterialComponents.Toolbar.PrimarySurface 样式。
  • elevationOverlayEnabled 设置为 false 解决了这个问题,奇怪的是,当海拔设置为 0 时仍然会应用此效果。谢谢您的帮助。

标签: android material-design toolbar


【解决方案1】:

所以在这种情况下,颜色看起来是一样的,但是当我使用我的表面颜色时,它不会。

这是因为Elevation Overlays.
您可以避免在您的应用主题中将高程叠加设置 elevationOverlayEnabled 设置为 false

最后一点。在您的MaterialToolbar 中,您应该使用:

    <com.google.android.material.appbar.MaterialToolbar
        style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface"
        ..>

此样式会自动在组件的浅色主题中的主颜色样式和深色主题中的表面颜色样式之间切换。

【讨论】:

  • 这个答案非常有用。多年来,我一直在追逐材料设计风格,想知道为什么材料设计会强制改变我痛苦选择的颜色,不知道暗模式的这个“功能”一直是罪魁祸首!
  • 天哪,我花了大约 4 个小时试图弄清楚为什么我的工具栏对 XML 中的颜色变化没有反应,却发现我在工具栏上使用和应用的样式有Widget.MaterialComponents.Toolbar 作为父母而不是Widget.MaterialComponents.Toolbar.PrimarySurface。很大的区别!追踪这些错误真是太痛苦了……
猜你喜欢
  • 2016-06-30
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 2015-08-31
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
相关资源
最近更新 更多