13

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

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

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

Bottom sheet example from Material Design specs

+0

Вы используете библиотеку поддержки o r что-то? –

+0

@AlexChengalan Правильно! v4, AppCompat и Design. – Chris

+0

try 'app: cardElevation =" 5dp "' –

ответ

19

Я знаю, что тень форма не имеет такой же вид, как высота - но, по крайней мере, дать ему попробовать. Хитрость заключается в использовании 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> 

выглядит так:

Bottom Sheet Shadow

EDIT

Получите еще лучший результат с обычаем ShadowView:

Тогда вам может сделать следующее:

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

Я не мог заставить 'android: elevation' работать. Это приемлемо. Благодарю. – ono

+0

Спасибо, но тень все еще видна, когда нижний лист скрыт.Я предполагаю, что это тоже необходимо будет скрыть. – SagunKho

+0

Вы можете включить тень в верхнюю часть нижнего листа, чтобы при скрытии она была вне экрана. –

7

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

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> 

 Смежные вопросы

  • Нет связанных вопросов^_^