解決策を探した後、問題を解決するものが見つかりませんでした。
私はアプリの大部分に影を作るいくつかの標高を持っています。
しかし、特定の場所では、私はそれを機能させることができません。
(下の写真に矢印を置いたところです)
ツールバーの下の白い領域は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>
標高が得られないのはなぜですか?
ここで説明されているように、 https://stackoverflow.com/a/27518160/2481494 影を描くための要件がいくつかあります。
親ビューグループのシャドウのスペース。 182
(パディングを使用しないでください。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>
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>
昇格が機能していない場合、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">
出力:
これは描画の問題です。
キャストシャドウは実際のビューの境界の外側に描画されるため、親レイアウトがビューに十分なスペースを「与えない」場合、クリップされます。
フラグメントの親(線形レイアウト)は同じサイズであるため、シャドウはクリップされます。 LinearLayoutの下部にマージンを追加します。
これが、下部に少し余白のあるFrameLayoutでレイアウトをラップするのに役立たない場合(パディングを使用しないでください。framelayoutのパディングも影を切り落とします)
1-2dpが必要です。
2つ目のレイアウトに「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"
/>
paddingRight
とpaddingBottom
(レイアウトの右下の影に)を使用しましたが、動作しましたが、影を表示します。そうしないと、描画可能な影が正しく機能しません。
同じ問題に直面した場合は、そのようなことをしてください。