如何正确设置recyclerview的高程值?
Posted
技术标签:
【中文标题】如何正确设置recyclerview的高程值?【英文标题】:How to properly set elevation value to recyclerview? 【发布时间】:2016-01-29 12:12:20 【问题描述】:我正在使用 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_
android:id="@+id/activity_grid_layout"
android:background="@drawable/gradient"
android:layout_
tools:context="com.mindhive.mindhive.activities.GridActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/grid_recycler_view"
android:layout_
android:layout_
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_
android:layout_
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" />
......
【问题讨论】:
也许你想使用可以被海拔提升的卡片。 我不想提升 recyclerview 中的项目,而是寻找整个 recyclerview 的提升。 【参考方案1】:我从here 搜索了一下后找到了答案。问题是透明背景。高程仅适用于视图上的非透明背景。为了解决这个问题,我们应该在视图上设置android:outlineProvider="bounds"
,在视图的父级上设置android:clipToPadding="false"
。
希望对某人有所帮助。
【讨论】:
这两个属性对我有用,但我需要为 View 本身添加它,而不是让它工作的父级【参考方案2】:对于 Lollipop,您可以使用 android:elevation 属性,但在 lollipop 版本以下您必须提供自定义阴影,因此请参阅以下阴影代码
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 文件的背景,它将正常工作。
【讨论】:
如果您查看我的代码,我已经在使用海拔属性,但即使我的设备在棒棒糖上运行,它仍然无法正常工作。 然后你可以使用这个文件作为你的inflater文件的背景,它适用于任何版本。【参考方案3】:只需在您的回收站视图中设置以下三个属性
android:outlineProvider="bounds"
android:background="@null"
android:elevation="2dp"
【讨论】:
【参考方案4】:android:elevation 只在运行 Lollipop 或更高版本的设备上应用阴影。如果你想支持旧设备,你必须自己创建一个影子。
【讨论】:
我的设备在 android 5.1.1 上运行,所以阴影应该可以完美运行。 如果您使用android:background="@android:color/white"
而不是android:background="@color/transparent"
会发生什么?顺便说一句,透明的内置颜色:"@android:color/transparent"
是的,可以解决它。感谢您指向android透明资源。我发现了问题并在 link 的帮助下解决了问题。我将背景设置为透明的,不会投射任何阴影。
随时发布您找到的解决方案的答案,并将其标记为已接受,以供未来的访问者使用。
我在 [这里] (***.com/questions/33500592/…) 发布了一个相关问题。如果您有任何见解,请发表评论。谢谢。以上是关于如何正确设置recyclerview的高程值?的主要内容,如果未能解决你的问题,请参考以下文章
android -constraintLayout如何将高程添加到粘性工具栏?
[原][osgearth]设置OE的高程,高度场的数据。修改设置高度值