android:elevation只有底部有阴影效果,如何让阴影效果出现在顶部?
android:elevation only have shadow effects on the bottom side, how to make the shadow effects show on top side?
我在一个activity的底部使用了framelayout,为了在fragment上显示阴影效果,我添加了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"/>
有一个技巧可用于在视图上方显示阴影。
基本上我们必须使用两个嵌套布局,其中外部布局使用 elevation
投射阴影,内部布局设置 background
。
然后通过给外层Layout设置一个padding
,我们可以将内层Layout向下移动,而不移动阴影,从而更多的阴影变得可见:
<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
来补偿由填充创建的偏移量。根据用例,我们可以省略它。
但注意:如果我们过度移动视图,一些渲染瑕疵就会变得可见:
我在一个activity的底部使用了framelayout,为了在fragment上显示阴影效果,我添加了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"/>
有一个技巧可用于在视图上方显示阴影。
基本上我们必须使用两个嵌套布局,其中外部布局使用 elevation
投射阴影,内部布局设置 background
。
然后通过给外层Layout设置一个padding
,我们可以将内层Layout向下移动,而不移动阴影,从而更多的阴影变得可见:
<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
来补偿由填充创建的偏移量。根据用例,我们可以省略它。
但注意:如果我们过度移动视图,一些渲染瑕疵就会变得可见: