私は 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>
ただし、影なしでリスト項目を表示すると次のようになります。
以下のことも試しましたが、効果はありませんでした。
- 親レイアウトではなく、ImageView と TextView 自体に高度を設定します。
- ImageView に背景を適用しました。
- Elevation の代わりに TranslationZ を使用しました。
ベストアンサー1
私は Lollipop の影を少しいじってみたのですが、次のような結果になりました:
ViewGroup
何らかの理由で親の境界が子の影を遮断しているようです。- で設定された影は、余白に広がる境界ではなく、 の境界
android:elevation
によって切り取られます。View
- 子ビューに影を表示させる正しい方法は、親にパディングを設定し、
android:clipToPadding="false"
その親に設定することです。
私の知っていることに基づいた提案は次のとおりです。
RelativeLayout
影を表示する相対レイアウトに設定したマージンと同じパディングを持つようにトップレベルを設定します。android:clipToPadding="false"
同じに設定しますRelativeLayout
。RelativeLayout
標高も設定されているから余白を削除します。- [編集] 高度が必要な子レイアウトに不透明の背景色を設定する必要がある場合もあります。
最終的には、トップレベルの相対レイアウトは次のようになります。
<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"
>