Как добавить тень в нижний лист?

На данный момент, когда официальный компонент нижнего листа из библиотеки дизайна Android реализован, верхний край не показывает тень. Но для того, что я видел в различных макетах и ​​спецификациях Material Design, нижний лист содержит отдельную тень.

Я думаю, что тень поможет удалять нижний лист из основного макета, особенно если есть значение заглядывания и/или нижний лист всегда отображается. В противном случае он просто будет сочетаться с основным макетом и его элементами.

Я пробовал как ViewCompat.setElevation(bottomSheet, 5);, так и установку android:elevation="5dp" для представления в XML без успеха.

Пример нижнего листа из спецификации материалов

Ответ 1

Я знаю, что теневая форма не имеет такого же внешнего вида, как высота, но, по крайней мере, дайте ей попробовать. Фокус в том, чтобы использовать app:layout_anchor, чтобы закрепить тень на нижнем листе.

activity_main.xml

<android.support.design.widget.CoordinatorLayout 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">

<MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<View
    android:id="@+id/shadow"
    android:layout_width="match_parent"
    android:layout_height="16dp"
    android:background="@drawable/shape_gradient_top_shadow"
    app:layout_anchor="@id/bottom_sheet" />

<FrameLayout
    android:id="@+id/bottom_sheet"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:clipToPadding="false"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior" />

</android.support.design.widget.CoordinatorLayout>

shape_gradient_top_shadow.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
    android:angle="90"
    android:endColor="@android:color/transparent"
    android:startColor="#64000000"/>
</shape>

Похож:

Тень нижнего листа

ИЗМЕНИТЬ

Получите еще лучший результат с помощью настраиваемого ShadowView:

Затем вы можете сделать следующее:

<ShadowView
    android:id="@+id/shadow"
    android:layout_width="match_parent"
    android:layout_height="16dp"
    android:gravity="bottom"
    app:layout_anchor="@id/bottom_sheet" />

Ответ 2

Для уровня API 21 и выше установите в родительском представлении следующее. Вы также можете попробовать в корневом каталоге нижнего листа (я не пробовал его в корневом представлении)

android:background="@android:color/white"
android:elevation="16dp"

Если ни один фон не может использовать

android:outlineProvider="bounds"

Например, у меня есть мой лист внутри вложенного представления прокрутки

<android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clipToPadding="false"
  app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
        android:elevation="16dp"
        android:outlineProvider="bounds"
        >

    <include layout="@layout/bottomsheet_1" />

    </android.support.v4.widget.NestedScrollView>