ConstraintLayout中的CardView上的阴影未显示

时间:2017-10-10 09:39:41

标签: android android-cardview shadow android-constraintlayout

我在CardView内有ConstraintLayout

此视图会被夸大并添加到LinearLayout

我希望CardView在下一个CardView上投下阴影,但它似乎被ConstraintLayout剪掉了。如何在elevation 上显示CardView阴影,而为其提供更多填充或边距?

即。如何在相邻项目上投射阴影?

<LinearLayout>
    <ConstraintLayout>
        <CardView> <-- This view's shadow is cut
        ...
        </CardView>
    </ConstraintLayout>

    <ConstraintLayout>
        <CardView>
        ...
        </CardView>
    </ConstraintLayout>
<LinearLayout>

3 个答案:

答案 0 :(得分:2)

尝试在卡片视图中添加此评论

card_view:cardUseCompatPadding="true"

答案 1 :(得分:1)

尝试添加

app:cardElevation="10dp"

要使用app:cardElevation,您必须添加到LinearLayout:

xmlns:app="http://schemas.android.com/apk/res-auto"

我在测试项目中尝试了这个,并且高程应该以这种方式工作。以下是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="ro.helpproject.funcode.help.MainActivity">


    <android.support.constraint.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">

        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="50dp"
            app:cardElevation="10dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TEST TEST" />

        </android.support.v7.widget.CardView>
    </android.support.constraint.ConstraintLayout>

    <android.support.constraint.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">

        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="50dp"
            app:cardElevation="10dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TEST TEST" />

        </android.support.v7.widget.CardView>
    </android.support.constraint.ConstraintLayout>

</LinearLayout>

enter image description here

答案 2 :(得分:0)

  

如何在不为其提供更多填充或边距的情况下在CardView上显示高程阴影?

     

即。如何在相邻项目上投射阴影?

出于实际原因和概念原因,你无法做到。

实际原因归结为Android框架如何绘制CardView阴影。在较旧的API级别上,卡片位于其自己的边界内,并且额外的空间用于绘制阴影。因此,即使你有两张卡立即彼此相邻,他们仍然拥有&#34;空间&#34;他们之间由于这些插入。来自文档:

  

在Lollipop之前,CardView会在其内容中添加填充并为该区域绘制阴影。

在Lollipop及更高版本上,阴影在父级范围内绘制,而不是在CardView范围内。如果在卡片的边缘与父母的边缘之间没有足够的空间来绘制整个阴影,父母仍会剪切阴影。在您的示例中,每个CardView都位于单独的父级中,因此即使您将这些父级立即放在一起,每个父级仍然会剪切其卡片的阴影。 / p>

至于概念上的原因,那不仅仅是阴影的作用(在自然界中)。如果您有两张相同高度的牌,即使他们彼此相邻,顶牌也不会在底牌上投下阴影。