私は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" />
......
here から少し検索して答えを見つけました。問題は透明な背景でした。標高は、ビュー上の不透明な背景のみで機能します。これを修正するには、ビューにAndroid:outlineProvider="bounds"
を設定し、ビューの親にAndroid:clipToPadding="false"
を設定する必要があります。
それが誰かを助けることを願っています。
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インフレータファイルの背景として指定すると、正常に機能します。
Android:elevationは、Lollipop以降を実行しているデバイスにのみ影を適用します。古いデバイスをサポートしたい場合は、自分でシャドウを作成する必要があります。