Ответ 1
Существует трюк, который можно использовать для отображения тени над представлением.
В основном мы должны использовать два вложенных макета, где внешний макет бросает тень с помощью elevation
, а внутренний макет устанавливает background
.
Затем, установив a padding
во внешний макет, мы можем сдвинуть внутренний макет вниз, не перемещая тень, тем самым становится больше видимой тени:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="50dp"
android:elevation="4dp"
android:outlineProvider="bounds"
android:paddingTop="2dp"
android:layout_marginTop="-2dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00737f">
<!-- content -->
</FrameLayout>
</FrameLayout>
Важным здесь является атрибут outlineProvider
, который требуется, чтобы внешний макет отображал тень даже без установки фона.
Далее мы укажем отрицательный margin
, чтобы компенсировать смещение, созданное дополнением. В зависимости от варианта использования мы можем опустить это.
Но внимание: если мы слишком сильно переместим View, некоторые видимые артефакты становятся видимыми: