为什么我为 cardBackgroundColor 设置的颜色与显示的颜色不完全一样?
How come the color I set for cardBackgroundColor isn't exactly the one that gets shown?
背景
我正在尝试为应用准备深色主题,其中一项要求是卡片和对话框具有特定颜色:#ff3c454c
问题
无论我是强制设置 (app:cardBackgroundColor="#3c454c"
)、参考设置 (app:cardBackgroundColor="@color/...
) 还是仅在主题中设置 - 在所有情况下我都无法获得我设置的颜色。相反,我得到了#525A61 的颜色。
我只测试了一种红色 (#f00) 以确保它会影响卡,而且确实如此,对于这种颜色,它确实可以正常工作。但是对于我设置的颜色,它没有。
我试过的
正如我所写,我尝试了多种设置颜色的方法。一开始我只想使用主题本身,所以我这样设置:
styles.xml
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
...
<item name="colorBackgroundFloating">@color/colorBackgroundFloating</item>
<item name="colorSurface">@color/colorBackgroundFloating</item>
</style>
res/values-night/colors.xml
<color name="colorBackgroundFloating">#ff3c454c</color>
后来我尝试直接使用颜色,甚至将其设置为硬编码。显示时颜色仍然不正确。
看到这可能是库本身的一个错误,我已经报告了这个 here(包括一个示例项目,如果你想检查的话)。
我注意到 BottomNavigationView 和其他类似情况可能会出现完全相同的问题。
问题
为什么会发生?
有什么解决方法吗?
可以为所有使用这些属性的视图全局修复它的东西?
您看到的是他们引入的高程叠加层,以便在深色主题中让高程更加明显,阴影不那么明显。您可以在这里阅读:https://material.io/develop/android/theming/dark/ 在 "Elevation Overlays"
部分
如果您不希望出现这种情况,简单的解决方案是将其添加到您的主题中。
<item name="elevationOverlayEnabled">false</item>
您还可以通过更改 alpha 将其调整为另一种颜色,甚至是更微妙的叠加版本:
<item name="elevationOverlayColor">#80FFFFFF</item>
使用来自 https://github.com/material-components/material-components-android/issues/1133
的更多信息进行编辑
如果您只想为一个组件或小部件禁用它,您可以为它定义一个带有主题覆盖的样式并在特定布局中使用它:
<style name="ThemeOverlay.MyApp.ElevationOverlayDisabled" parent="">
<item name="elevationOverlayEnabled">false</item>
</style>
<style name="Widget.MyApp.CardView" parent="Widget.MaterialComponents.CardView">
<item name="materialThemeOverlay">@style/ThemeOverlay.MyApp.ElevationOverlayDisabled</item>
</style>
如果您想为应用中的所有卡片禁用它但在其他组件中保留它,您可以将该样式设置为 material 卡片视图的默认样式:
# Set in your app theme
<item name="materialCardViewStyle">@style/Widget.MyApp.CardView</item>
背景
我正在尝试为应用准备深色主题,其中一项要求是卡片和对话框具有特定颜色:#ff3c454c
问题
无论我是强制设置 (app:cardBackgroundColor="#3c454c"
)、参考设置 (app:cardBackgroundColor="@color/...
) 还是仅在主题中设置 - 在所有情况下我都无法获得我设置的颜色。相反,我得到了#525A61 的颜色。
我只测试了一种红色 (#f00) 以确保它会影响卡,而且确实如此,对于这种颜色,它确实可以正常工作。但是对于我设置的颜色,它没有。
我试过的
正如我所写,我尝试了多种设置颜色的方法。一开始我只想使用主题本身,所以我这样设置:
styles.xml
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
...
<item name="colorBackgroundFloating">@color/colorBackgroundFloating</item>
<item name="colorSurface">@color/colorBackgroundFloating</item>
</style>
res/values-night/colors.xml
<color name="colorBackgroundFloating">#ff3c454c</color>
后来我尝试直接使用颜色,甚至将其设置为硬编码。显示时颜色仍然不正确。
看到这可能是库本身的一个错误,我已经报告了这个 here(包括一个示例项目,如果你想检查的话)。
我注意到 BottomNavigationView 和其他类似情况可能会出现完全相同的问题。
问题
为什么会发生? 有什么解决方法吗? 可以为所有使用这些属性的视图全局修复它的东西?
您看到的是他们引入的高程叠加层,以便在深色主题中让高程更加明显,阴影不那么明显。您可以在这里阅读:https://material.io/develop/android/theming/dark/ 在 "Elevation Overlays"
部分如果您不希望出现这种情况,简单的解决方案是将其添加到您的主题中。
<item name="elevationOverlayEnabled">false</item>
您还可以通过更改 alpha 将其调整为另一种颜色,甚至是更微妙的叠加版本:
<item name="elevationOverlayColor">#80FFFFFF</item>
使用来自 https://github.com/material-components/material-components-android/issues/1133
的更多信息进行编辑如果您只想为一个组件或小部件禁用它,您可以为它定义一个带有主题覆盖的样式并在特定布局中使用它:
<style name="ThemeOverlay.MyApp.ElevationOverlayDisabled" parent="">
<item name="elevationOverlayEnabled">false</item>
</style>
<style name="Widget.MyApp.CardView" parent="Widget.MaterialComponents.CardView">
<item name="materialThemeOverlay">@style/ThemeOverlay.MyApp.ElevationOverlayDisabled</item>
</style>
如果您想为应用中的所有卡片禁用它但在其他组件中保留它,您可以将该样式设置为 material 卡片视图的默认样式:
# Set in your app theme
<item name="materialCardViewStyle">@style/Widget.MyApp.CardView</item>