如何正确设置海拔值为recyclerview?

我正在使用android中的recyclerview进行网格布局。 网格占据屏幕的一部分,并有阴影。 为了获得所需的阴影效果,我使用12 dp的高程值。 但它似乎没有工作,因为我看不到任何海拔(阴影)的网格。 为什么发生这种情况? recyclerview不支持海拔?

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:id="@+id/activity_grid_layout" android:background="@drawable/gradient" android:layout_height="match_parent" tools:context="com.mindhive.mindhive.activities.GridActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/grid_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="110dp" android:layout_marginLeft="15dp" android:layout_marginTop="80dp" android:background="@color/transparent" android:elevation="12dp" android:scrollIndicators="none" android:scrollbars="none" android:padding="0dp" /> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/grid_recycler_view" android:layout_alignStart="@+id/grid_recycler_view" android:layout_marginBottom="-18dp" android:layout_marginStart="67dp" android:src="@drawable/main_filter" android:elevation="1dp" /> ...... 

我从这里search了一下后find了答案。 问题是透明的背景。 立面只适用于视图上不透明的背景。 为了解决这个问题,我们应该在视图的父视图上设置android:outlineProvider="bounds"android:clipToPadding="false"

希望它可以帮助别人。

对于棒棒糖,你可以使用android:elevation属性,但是在下面的棒棒糖版本中,你必须给自定义阴影,所以请参考下面的代码阴影

card_background.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="#CABBBBBB"/> <corners android:radius="2dp" /> </shape> </item> <item android:left="0dp" android:right="0dp" android:top="0dp" android:bottom="2dp"> <shape android:shape="rectangle"> <solid android:color="@android:color/white"/> <corners android:radius="2dp" /> </shape> </item> </layer-list> 

把这个文件作为你的recyclerview inflater文件的背景,它会正常工作。

android:elevation只会在运行Lollipop或更高版本的设备上应用阴影。 如果你想支持较旧的设备,你必须自己创build一个阴影。