【问题标题】:Android CardView with a custom shadow color具有自定义阴影颜色的 Android CardView
【发布时间】:2015-07-08 14:55:09
【问题描述】:

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

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

【问题讨论】:

  • 我仍在寻找解决方案。如果你有,请告诉我。
  • @Maulikpatel 我想我在 Github 上找到了一个项目,但我不记得名字了。你发现了什么?
  • 应该是这个:github.com/ZieIony/Carbon:在描述中它说“具有真实阴影和圆角的 CardView”,但我没有尝试过。
  • 9 补丁图像对我有用。

标签: android shadow android-cardview


【解决方案1】:

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

编辑:覆盖资源值只会影响棒棒糖之前的设备。在 Lollipop 及更高版本上,CardView 始终使用无法更改颜色的本机阴影实现。

【讨论】:

  • 通过覆盖来改变已经绰绰有余,但你的意思是覆盖这些值? - grepcode.com/file/repository.grepcode.com/java/ext/… - 在我的 color.xml 中,我输入了我的自定义 <color name="cardview_shadow_start_color">#37000000</color><color name="cardview_shadow_end_color">#03000000</color> - 系统会自动获取它们吗?
  • 是的,就是这些值,它们将应用于您的所有 CardViews。我相信您还需要将 useCompatPadding 设置为 true 才能在较新的 Android 版本上看到颜色。
  • 我现在试过了,但是不行。资源来自android.support.v7.cardview.R.color.cardview_shadow_start_color 它应该如何从我的 color.xml 中获取我的资源?你能举个例子吗?
  • 我更正了自己,它仅适用于 pre-L,但 useCompatPadding 设置为 true。你能举个 L 的例子吗?
  • 对不起,我认为设置“useCompatPadding”会使 CardView 使用 pre-L 实现,它使用资源中的颜色,但事实并非如此。 L CardView 使用原生阴影,原生阴影颜色不能自定义。您最好的选择可能是创建一个自定义的 9-patch 图像,其中包含表示自定义彩色阴影的内置填充,并将其用作 FrameLayout 的背景。
【解决方案2】:

更新:查看my modification


这里有一个解决方法:

复制the source codeCardView。然后创建您自己的 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 类中的那些。此外,您可以使其更具可定制性。

希望可以帮助别人。

【讨论】:

    【解决方案3】:

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

    例子:

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/view_click_basement"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="2dp"
        card_view:cardCornerRadius="5dp"
        card_view:cardBackgroundColor="@color/colorNewGreen"
        card_view:cardElevation="10dp"
        card_view:cardUseCompatPadding="true">
    
        <android.support.v7.widget.CardView
            android:id="@+id/view_click"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="2dp"
            card_view:cardCornerRadius="5dp"
            card_view:cardElevation="2dp"
            card_view:cardUseCompatPadding="true">
    

    【讨论】:

      【解决方案4】:

      试试这个:-

      android:outlineSpotShadowColor="@color/" android:outlineAmbientShadowColor="@color/"

      【讨论】:

        猜你喜欢
        • 2018-12-02
        • 2018-02-05
        • 2021-03-27
        • 2020-12-24
        • 2017-12-02
        • 2021-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多