高程不适用于LinearLayout

时间:2015-10-29 14:31:23

标签: android android-layout material-design

在寻找解决方案后,我找不到任何解决问题的方法。

我有一些高度会在我的应用程序的很大一部分上产生阴影 但在某个特定的地方,我无法使其发挥作用 (这是我在下面的图片上放箭头的地方)

enter image description here

工具栏下方的白色区域为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>

你知道为什么我没有升高吗?

8 个答案:

答案 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">

输出:

enter image description here

答案 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)

我使用了paddingRightpaddingBottom(对于布局底部和右侧的阴影)然后它对我有效,它会显示阴影,否则可绘制的阴影将无法正常工作。

如果遇到同样的问题,请做这样的事情。

答案 6 :(得分:0)

  • 您应该注意 android:hardwareAccelerated="false",如果您在 manifest 中有此行​​,则阴影不会显示

  • 如果以上几点没问题,那么在你的布局 android:clipToPadding="false"android:outlineProvider="bounds"

    中试试这个

答案 7 :(得分:-2)

请在清单文件中启用hardwardAccelerated选项,

<application
  ...
  android:hardwareAccelerated="true">