Android Material 工具栏表面颜色在两个不同的工具栏上看起来不同

Android Material Toolbar surface color looks different on two different toolbars

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

android:background="?attr/colorSurface"

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

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

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

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

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

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

So in this case the colors look the same, but when I'm using my surface color, it does not.

它的发生是因为 Elevation Overlays.
您可以避免在您的应用主题中将海拔叠加设置 elevationOverlayEnabled 设置为 false

最后一点。在你的 MaterialToolbar 你应该使用:

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

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