android - 为什么我为 cardBackgroundColor 设置的颜色不完全是显示的颜色?

标签 android colors materialcardview

背景

我正在尝试为应用程序准备深色主题,其中一项要求是卡片和对话框具有特定颜色:#ff3c454c

问题

无论我是通过强制( app:cardBackgroundColor="#3c454c" )、通过引用( app:cardBackgroundColor="@color/... )还是仅在主题中设置它 - 在所有情况下我都没有得到我设置的颜色。相反,我得到了#525A61 的颜色。

我只测试了一种红色(#f00),以确保它会影响卡片,而且确实如此,而且对于这种颜色,它确实会很好。但是对于我设置的颜色,它没有。

我试过的

正如我所写,我尝试了多种方法来设置颜色。一开始我只想使用主题本身,所以我将其设置为:

样式.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 和其他类似情况也出现了完全相同的问题。

问题

为什么会发生?
有什么解决方法吗?
可以为所有使用这些属性的 View 全局修复它吗?

最佳答案

您所看到的是他们引入的高程叠加层,以使高程在黑暗主题中更加明显,其中阴影不那么明显。你可以在这里阅读:https://material.io/develop/android/theming/dark/在“高程叠加层”部分

如果您不想要这种行为,简单的解决方案是将其添加到您的主题中。

<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 卡片 View 的默认样式:
# Set in your app theme
<item name="materialCardViewStyle">@style/Widget.MyApp.CardView</item>

关于android - 为什么我为 cardBackgroundColor 设置的颜色不完全是显示的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60800857/

相关文章:

android - NavigationView 项目选择未在选项卡更改时更新

java - Android资源文件夹中res/color和res/values/colors.xml的区别

python - 如何将整数值映射到列表中的字符串?

android - CardView 或 MaterialTextView OnClickListener 不起作用

android - 将 ListFragment 与带有 Holder 模式的 SimpleCursorAdapter 结合使用

android - "GeofencingAPI is deprecated"

javascript - 在我的 android 程序中在哪里编写 JavaScript

css - 样式超链接与正文几乎没有区别有什么意义?

android - 为 MaterialCardView 设置 "outside"底部边缘无法按预期工作