フラグメントの影の効果を示すために、アクティビティの下部でフレームレイアウトを使用し、Android:elevationを追加します。しかし、影の効果は上側ではなく下側にしか表示されません。アドバイスをいただけますか
<FrameLayout
Android:id="@+id/bottom_container"
Android:background="#00737f"
Android:layout_width="match_parent"
Android:layout_height="50dp"
Android:layout_gravity="bottom"
Android:elevation="4dp"
Android:layout_alignParentBottom="true"
Android:layout_marginBottom="50dp"/>
ビューの上に影を表示するために使用できるトリックがあります。
基本的に、2つのネストされたレイアウトを使用する必要があります。外側のレイアウトはelevation
でシャドウを投影し、内側のレイアウトはbackground
を設定します。次に、外側のレイアウトにpadding
を設定することで、影を動かさずに内側のレイアウトを下に移動でき、より多くの影が見えるようになります。
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="50dp"
Android:layout_alignParentBottom="true"
Android:layout_marginBottom="50dp"
Android:elevation="4dp"
Android:outlineProvider="bounds"
Android:paddingTop="2dp"
Android:layout_marginTop="-2dp">
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#00737f">
<!-- content -->
</FrameLayout>
</FrameLayout>
ここで重要なのは属性outlineProvider
です。これは、背景が設定されていなくても外側のレイアウトに影を落とすために必要です。
さらに、負のmargin
を指定して、パディングによって作成されたオフセットを補正します。ユースケースによっては、これを省略できます。
ただし、注意:ビューを大きくシフトしすぎると、いくつかのレンダリングアーティファクトが表示されます。