在寻找解决方案后,我找不到任何解决问题的方法。
我有一些高度会在我的应用程序的很大一部分上产生阴影 但在某个特定的地方,我无法使其发挥作用 (这是我在下面的图片上放箭头的地方)
工具栏下方的白色区域为Fragment
,显示LinearLayout
布局:
<LinearLayout
android:id="@+id/panelAddress"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_flat_white"
android:elevation="10dp"
android:orientation="vertical"
android:padding="20dp"
>
//some content
</LinearLayout>
片段的父级:
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawerLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/custom_toolbar"
layout="@layout/toolbar"/>
<RelativeLayout
android:id="@+id/mapLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<FrameLayout
android:id="@+id/fragment_container_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
/>
<FrameLayout
android:id="@+id/fragment_container_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
你知道为什么我没有升高吗?
答案 0 :(得分:64)
如此处https://stackoverflow.com/a/27518160/2481494所述,有几个要求,以便绘制阴影:
空格。正如提到的流血,填充可以导致阴影被剪裁:
(不要使用填充。在framelayout上填充也会削掉阴影)
但是,可以通过父级中的android:clipToPadding="false"
修复此问题。
高架视图需要有背景来投射阴影。如果没有关于@drawable/button_flat_white
的信息,我无法判断这是否是您的问题。
要解决您的问题,您应该像这样修改FrameLayout:
<FrameLayout
android:id="@+id/fragment_container_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:clipToPadding="false"
android:paddingBottom="10dp"/>
要检查@drawable/button_flat_white
是否会导致任何问题,请尝试暂时将LinearLayout的背景更改为简单颜色:
<LinearLayout
android:id="@+id/panelAddress"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="10dp"
android:orientation="vertical"
android:padding="20dp"
android:background="#fff">
//some content
</LinearLayout>
答案 1 :(得分:16)
只需将CardView作为LinearLayout的父级,即可实现提升。
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
card_view:cardUseCompatPadding="true"
card_view:cardElevation="4dp"
card_view:cardCornerRadius="3dp">
<LinearLayout
android:id="@+id/panelAddress"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_flat_white"
android:orientation="vertical"
android:padding="20dp">
//some content
</LinearLayout>
</android.support.v7.widget.CardView>
答案 2 :(得分:4)
如果高程不起作用,则可以通过在LinearLayout上提供参考作为背景来创建XML:
shadowfile.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
<solid android:color="#18000000" />
<corners android:radius="8dp" />
</shape>
</item>
<item>
<shape>
<padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
<solid android:color="#05000000" />
<corners android:radius="7dp" />
</shape>
</item>
<item>
<shape>
<padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
<solid android:color="#10000000" />
<corners android:radius="6dp" />
</shape>
</item>
<item>
<shape>
<padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
<solid android:color="#15000000" />
<corners android:radius="5dp" />
</shape>
</item>
<item>
<shape>
<padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
<solid android:color="#20000000" />
<corners android:radius="4dp" />
</shape>
</item>
<!-- Background -->
<item>
<shape>
<solid android:color="#FFFFFF" />
<corners android:radius="0dp" />
</shape>
</item>
</layer-list>
那样添加:
<LinearLayout
android:id="@+id/profileDetails"
android:layout_width="match_parent"
android:layout_height="125dp"
android:background="@drawable/shadowfile"
android:padding="15dp"
android:layout_below="@id/toolbar_title"
android:layout_marginTop="20dp">
输出:
答案 3 :(得分:2)
这是一个绘图问题。
投射阴影是在实际视图边界之外绘制的,因此如果父布局没有“给”视图足够的空间,它将被剪裁。
由于片段的父级(线性布局)具有相同的大小,因此会剪切阴影。在LinearLayout的底部添加一个边距 如果这没有帮助尝试用底部有一点边距的FrameLayout包装布局(不要使用填充。在framelayout上填充也会关闭阴影)
1-2dp应该这样做。
答案 4 :(得分:0)
我希望它可以帮助你,只需在第二个布局中添加“marginTop”。
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="90dp"
android:orientation="vertical"
android:elevation="5dp"
/>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="90dp"
android:orientation="vertical"
android:padding="5dp"
android:layout_marginTop="3dp"
/>
答案 5 :(得分:0)
我使用了paddingRight
和paddingBottom
(对于布局底部和右侧的阴影)然后它对我有效,它会显示阴影,否则可绘制的阴影将无法正常工作。
如果遇到同样的问题,请做这样的事情。
答案 6 :(得分:0)
您应该注意 android:hardwareAccelerated="false"
,如果您在 manifest
中有此行,则阴影不会显示
如果以上几点没问题,那么在你的布局 android:clipToPadding="false"
和 android:outlineProvider="bounds"
答案 7 :(得分:-2)
请在清单文件中启用hardwardAccelerated选项,
<application
...
android:hardwareAccelerated="true">