如何正确设置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如何将高程添加到粘性工具栏?

CardView 默认高程值

为啥我的arcgis高程不能改颜色

[原][osgearth]设置OE的高程,高度场的数据。修改设置高度值

南方cass 中 用原图生成无编码高程点的时候,x,y坐标与原图不符,高程值是对的,如何解决这个问题

如何从 GPX 文件中提取高程数据