我试图用.NET来改变材质工具栏的背景色为表面色。
android:background="?attr/colorSurface"
这和预期的一样(为了简化,我直接在视图中设置了背景色,而没有为其创建自定义样式)。为了给亮模式和暗模式定义多种颜色,我创建了两个 colors.xml 文件。当在浅色模式下,应用的表面颜色看起来和预期的一样。
但当我切换到暗模式时,两个工具栏看起来是这样的(仍然都引用相同的颜色资源)。
右边的工具栏有正确的背景色,左边的则没有。
然后我检查了是否在暗色模式下我定义的每一种颜色都会发生同样的事情,所以我把表面颜色改为我的主色。在黑暗模式下,它看起来像这样。
所以在这种情况下,颜色看起来是一样的 但当我使用我的表面颜色时,就不一样了。
我还试着把Widget.MaterialComponents.Toolbar.Surface工具栏改成Widget.MaterialComponents.Toolbar,但结果还是一样。
所以在这种情况下,颜色看起来是一样的,但当我使用我的表面颜色时,它并没有。
发生这种情况的原因是 高程覆盖. 您可以避免海拔覆盖设置为 elevationOverlayEnabled
到 false
在你的应用主题中。
最后说一句。在您的 MaterialToolbar
你应该使用。
<com.google.android.material.appbar.MaterialToolbar
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface"
..>
这个样式会在浅色主题的组件主色样式和深色主题的表面色样式之间自动切换。