Android更改材质高程阴影颜色

Posted

技术标签:

【中文标题】Android更改材质高程阴影颜色【英文标题】:Android change Material elevation shadow color 【发布时间】:2015-05-25 02:08:24 【问题描述】:

是否可以更改 xml 高程属性产生的阴影颜色? 我希望通过代码动态更改阴影。

【问题讨论】:

不行,框架提供的阴影颜色不能改变。 因为我对 CardView 上的阴影颜色感兴趣,所以我找到了一些东西,但不明白如何使用它:https://github.com/gabrielemariotti/cardslib/blob/master/doc/SHADOW.md 我也发现了这个:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.1_r1/frameworks/support/v7/cardview/res/values/colors.xml 还有这个:https://developer.android.com/training/material/shadows-clipping.html According to this post 好像不能改变阴影的颜色 【参考方案1】:

我知道这个问题已经很老了,可能作者不再需要答案了。我就把它留在这里,以便其他人可以找到它。

Lollipop 的高程系统不支持彩色阴影。

但是,如果您需要彩色阴影,可以使用 Carbon 来获得它们。它是一种对 Material Design 的支持库,在最新版本中,有一个更改阴影颜色的选项。 Behance 上有很多不错的设计,带有彩色阴影,我认为拥有它们会很好,尽管 Android 中没有这样的功能。请务必注意,在 所有 Android 版本(包括 5.0+)上也会模拟彩色阴影。

https://github.com/ZieIony/Carbon

以下图片和代码可以在 Carbon 的示例中找到。

代码:

<carbon.widget.LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal">

    <carbon.widget.Button
        android:layout_
        android:layout_
        android:layout_margin="@dimen/carbon_padding"
        android:background="#ffffff"
        app:carbon_cornerRadius="2dp"
        app:carbon_elevation="8dp"
        app:carbon_elevationShadowColor="@color/carbon_red_700"/>

</carbon.widget.LinearLayout>

“卡片视图”:

<carbon.widget.LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal">

    <carbon.widget.LinearLayout
        android:layout_
        android:layout_
        android:layout_margin="@dimen/carbon_margin"
        android:background="#ffffff"
        app:carbon_cornerRadius="2dp"
        app:carbon_elevation="8dp"
        app:carbon_elevationShadowColor="@color/carbon_red_700">

        <carbon.widget.ImageView
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:src="@drawable/test_image"/>

        <carbon.widget.TextView
            android:layout_
            android:layout_
            android:text="test text"/>
    </carbon.widget.LinearLayout>

</carbon.widget.LinearLayout>

【讨论】:

您能否详细说明您是如何使用 Carbon 来创建彩色阴影的?我目前无法使其工作。提前致谢。 我添加了一个sn-p。您可以在存储库中找到完整的示例。它位于示例应用程序的“功能/阴影”下。如果您遇到任何问题,请随时打开一个问题并在那里讨论。 非常感谢。然而问题是我想在 CardView 或类似的东西上使用它,我可以在里面有子视图。所以按钮在我的情况下不起作用。 @Zielony 你的仓库很难集成到我的项目中:( @Tony 呃,对不起。您是否尝试复制所需的代码片段?或者您更愿意从 AppCompat 迁移到 Carbon?您可以随时向我的 GitHub 项目添加问题以寻求帮助。【参考方案2】:

View 类中提供了起始 API 28(Pie)View#setOutlineAmbientShadowColor(int color) 和 View#setOutlineSpotShadowColor(int color)。

如果你在你的视图上使用高程,你可以使用这两种方法来改变阴影的颜色。

【讨论】:

此外,这些也可以在你的主题 xml 中设置为 @color/yourAmbientShadow@color/yourSpotShadow【参考方案3】:

您可以使用Shadow Layout。检查我的answer。

【讨论】:

以上是关于Android更改材质高程阴影颜色的主要内容,如果未能解决你的问题,请参考以下文章

Android AppCompat 更改材质按钮的文本颜色

如何从一侧移除高程阴影而不从卡片或材质小部件中移除高程本身?

如何从一个小部分的材质 UI AppBar 中删除高程(框阴影)?

材质设计的网格视图中未显示高程

如何在 Flutter 上设置自定义高程颜色?

按钮上的阴影颜色取决于 XML 中的状态 - Android