web-dev-qa-db-ja.com

LinearLayoutで標高が機能しない

解決策を探した後、問題を解決するものが見つかりませんでした。

私はアプリの大部分に影を作るいくつかの標高を持っています。
しかし、特定の場所では、私はそれを機能させることができません。
(下の写真に矢印を置いたところです)

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>

標高が得られないのはなぜですか?

39
agonist_

ここで説明されているように、 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>
66
Andreas Wenger

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>
18
ch3tanz

昇格が機能していない場合、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

4
amit

これは描画の問題です。

キャストシャドウは実際のビューの境界の外側に描画されるため、親レイアウトがビューに十分なスペースを「与えない」場合、クリップされます。

フラグメントの親(線形レイアウト)は同じサイズであるため、シャドウはクリップされます。 LinearLayoutの下部にマージンを追加します。
これが、下部に少し余白のあるFrameLayoutでレイアウトをラップするのに役立たない場合(パディングを使用しないでください。framelayoutのパディングも影を切り落とします)

1-2dpが必要です。

2
David Medenjak

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"
    />
0
Basant

paddingRightpaddingBottom(レイアウトの右下の影に)を使用しましたが、動作しましたが、影を表示します。そうしないと、描画可能な影が正しく機能しません。

同じ問題に直面した場合は、そのようなことをしてください。

0
user7957410