web-dev-qa-db-ja.com

Android ScrollViewクリッピングの子の立面影

タイトルにあるように、私はCardViewをScrollViewの内側に配置しようとしていますが、CardViewの標高の影はその親によってオフになっています...

これはレイアウトXMLです。

<FrameLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".TestScrollViewActivity">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="128dp"
        Android:background="?colorPrimary"
        Android:gravity="bottom"
        Android:minHeight="?actionBarSize"/>

    <ScrollView
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="center_horizontal"
        Android:clipToPadding="false"
        Android:paddingBottom="40dp"
        Android:paddingTop="60dp">

        <Android.support.v7.widget.CardView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:elevation="4dp"
            app:cardBackgroundColor="@Android:color/white"
            app:cardCornerRadius="0dp">

            <LinearLayout
                Android:layout_width="400dp"
                Android:layout_height="600dp"
                Android:orientation="vertical">

            </LinearLayout>

        </Android.support.v7.widget.CardView>

    </ScrollView>

</FrameLayout>

私が見つけた唯一の回避策は、親のScrollViewにパディングを追加するか、子のCardViewにマージンを追加することです...

パディング/マージンを使用せずにこれが発生しないようにするオプションはありますか?

ありがとう。

編集:

これは、親スクロールビューにパディングを設定せずにレイアウトがどのように見えるかを示しています。ご覧のとおり、左右の影がカットされています。 Child's side shadow being cut off by parent scroll view

ここで、親のscrollview側にパディングが追加されると、影は次のように正しく描画されます。 Child's side shadow now shown correctly after adding padding to right and left side of scrollview

だから、ここでの私の主な質問は、これを実現する唯一の方法ですか?それとも、親ビューに、子ビューを正しく描画できるタグまたは構成がありますか?

17
vicmns

これは私にとって同様の問題でうまくいきました:

子ビューにシャドウを表示させる正しい方法は、親にパディングを設定し、その親にAndroid:clipToPadding = "false"を設定することです。

ここにあるように: Android "elevation"が影を表示していない

53
Anthea

私は同じ問題に直面していました、カードビューにcardUseCompatPadding属性を追加することで解決しました:

app:cardUseCompatPadding="true"

このソリューションを使用した後、影が切り取られたり、トリミングされたりすることはありません。

33
Sina Masnadi