web-dev-qa-db-ja.com

高度値を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" />
 ......
15
Neanderthal

here から少し検索して答えを見つけました。問題は透明な背景でした。標高は、ビュー上の不透明な背景のみで機能します。これを修正するには、ビューにAndroid:outlineProvider="bounds"を設定し、ビューの親にAndroid:clipToPadding="false"を設定する必要があります。

それが誰かを助けることを願っています。

22
Neanderthal

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インフレータファイルの背景として指定すると、正常に機能します。

3
Sachin Mandhare

Android:elevationは、Lollipop以降を実行しているデバイスにのみ影を適用します。古いデバイスをサポートしたい場合は、自分でシャドウを作成する必要があります。

0
Daniel Zolnai