Android CardView具有自定义阴影颜色

是否可以更改CardView周围阴影的颜色? 主要用于标记选中卡时点亮的卡?

应该在L和pre-L设备上有效。

CardView阴影颜色在CardView库的资源中定义。 您可以通过重新定义自己项目中的资源值来覆盖它们,但不能通过代码动态更改它们。

编辑:覆盖资源值仅影响前Lollipop设备。 在Lollipop及以上版本中, CardView始终使用其颜色无法更改的本机阴影实现。

更新 :检查我的修改 。


这是一个解决方法:

复制CardView 的源代码 。 然后创建自己的Android库模块并使用此模块而不是支持库。 在这些之后, 在CardView中注释或删除代码,如下所示

 static { // if (Build.VERSION.SDK_INT >= 21) { // IMPL = new CardViewApi21Impl(); // } else if (Build.VERSION.SDK_INT >= 17) { IMPL = new CardViewApi17Impl(); } else { IMPL = new CardViewBaseImpl(); } IMPL.initStatic(); } 

也就是说,即使api为21或更高,你也会使用compat-version CardViewApi17Impl 。 然后,您可以定义自己的cardview_shadow_start_colorcardview_shadow_end_color来覆盖RoundRectDrawableWithShadow类中的那些。 此外,您可以使其更具可定制性。

希望可以帮助别人。

我用了一个小技巧。 一个CardView放在另一个后面。 两者都是相同的,不同之处在于card_view:cardElevation="10dp"用于背景一, card_view:cardElevation="2dp"用于面对一个。 高程的减法提供了你的阴影有多长,第二个CardView的颜色将是第一个阴影的颜色。

例: