319

私は ListView を持っており、各リスト項目でその下に影を表示したいと考えています。私は Android Lollipop の新しい標高機能を使用して、影を落としたいビューに Z を設定しています。これは既に ActionBar (技術的には Lollipop のツールバー) で効果的に行っています。Lollipop の標高を使用していますが、何らかの理由でリスト アイテムの下に影が表示されません。各リスト項目のレイアウトの設定方法は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    style="@style/block"
    android:gravity="center"
    android:layout_gravity="center"
    android:background="@color/lightgray"
    >

    <RelativeLayout
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:elevation="30dp"
        >

        <ImageView
            android:id="@+id/documentImageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/alphared"
            android:layout_alignParentBottom="true" >

            <appuccino.simplyscan.Extra.CustomTextView
                android:id="@+id/documentName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                app:typeface="light"
                android:paddingLeft="16dp"
                android:paddingTop="8dp"
                android:paddingBottom="4dp"
                android:singleLine="true"
                android:text="New Document"
                android:textSize="27sp"/>

            <appuccino.simplyscan.Extra.CustomTextView
                android:id="@+id/documentPageCount"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                app:typeface="italic"
                android:paddingLeft="16dp"
                android:layout_marginBottom="16dp"
                android:text="1 page"
                android:textSize="20sp"/>

        </LinearLayout>

    </RelativeLayout>

</RelativeLayout>

ただし、影なしでリスト項目を表示する方法は次のとおりです。 ここに画像の説明を入力

また、次のことを試してみましたが、役に立ちませんでした。

  1. 親レイアウトではなく、ImageView と TextViews 自体に標高を設定します。
  2. ImageView に背景を適用しました。
  3. Elevation の代わりに TranslationZ を使用しました。
4

22 に答える 22

438

Lollipop でシャドウを少しいじってみたところ、次のような結果が得られました。

  1. ViewGroupの境界が何らかの理由でその子の影を遮断しているようです。と
  2. で設定された影は、マージンを越えて拡張された境界ではなく、 の境界によって切り取られますandroid:elevationView
  3. 子ビューに影を表示させる正しい方法は、親にパディングを設定android:clipToPadding="false"し、その親に設定することです。

私が知っていることに基づいて、あなたへの私の提案は次のとおりです。

  1. RelativeLayoutシャドウを表示する相対レイアウトで設定した余白と同じパディングを持つようにトップレベルを設定します。
  2. android:clipToPadding="false"同じに設定しRelativeLayoutます。
  3. RelativeLayout高度が設定されているから余白を削除します。
  4. [編集] 昇格が必要な子レイアウトに非透明の背景色を設定する必要がある場合もあります。

最終的に、トップレベルの相対レイアウトは次のようになります。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/block"
    android:gravity="center"
    android:layout_gravity="center"
    android:background="@color/lightgray"
    android:paddingLeft="40dp"
    android:paddingRight="40dp"
    android:paddingTop="20dp"
    android:paddingBottom="20dp"
    android:clipToPadding="false"
    >

内部の相対的なレイアウトは次のようになります。

<RelativeLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="[some non-transparent color]"
    android:elevation="30dp"
    >
于 2014-12-17T04:07:21.103 に答える
334

背景のないビューがある場合、この行が役立ちます

android:outlineProvider="bounds"

デフォルトでは、影はビューの背景によって決定されるため、背景がなければ影もありません。

于 2015-07-07T14:46:30.457 に答える
114

どうやら、ビューに標高を設定して表示させることはできません。背景も指定する必要があります。

私の LinearLayout に追加された次の行は、最終的に影を示しました:

android:background="@android:color/white"
android:elevation="10dp"
于 2016-04-30T14:10:22.960 に答える
7

背景色を追加すると役立ちました。

<CalendarView
    android:layout_width="match_parent"
    android:id="@+id/calendarView"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:layout_height="wrap_content"
    android:elevation="5dp"

    android:background="@color/windowBackground"

    />
于 2016-09-22T14:54:29.453 に答える
0

あなたの問題は、標高要素をその親を満たす相対レイアウトに適用したという事実に起因すると思います。その親は、独自の描画キャンバス内のすべての子ビューをクリップします (子の影を処理するビューです)。RelativeLayoutビュー xmlの最上位 (ルート タグ) に標高プロパティを適用することで、これを修正できます。

于 2016-01-29T17:46:38.477 に答える