24

I'm implementing Bottom Navigation Bar in Android app using Google's support design library v25.1.0. Is there any way to add drop shadow effect, same as current Android native Google Photos app?

enter image description here

Jan Slominski
  • 2,968
  • 4
  • 35
  • 61

4 Answers4

107

You can draw your own shadow just above the bottom bar using simple View and its background:

<View
    android:layout_width="match_parent"
    android:layout_height="4dp"
    android:layout_above="@id/bottom_bar"
    android:background="@drawable/shadow"/>

drawable/shadow.xml:

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

Also, there are no compatibility issues if use this approach.

Alexander Bilchuk
  • 1,790
  • 1
  • 12
  • 17
5

You can use elevation to add shadows to any view

<TextView
android:id="@+id/myview"
...
android:elevation="2dp"

android:background="@drawable/myrect" />

Refer this for more information

SGR
  • 51
  • 2
  • Does not work in my project: "Attribute 'elevation' is only used in API level 21 and higher (current min is 16)", would used that if it did work. – Jan Slominski Mar 09 '17 at 11:33
4

For those using a CoordinatorLayout with the Bottom Navigation Bar (or BottomAppBar), you can use the following to attach a shadow above the bar:

<View
    android:layout_width="match_parent"
    android:layout_height="4dp"
    android:background="@drawable/shadow"
    app:layout_anchor="@+id/toolbar"
    app:layout_anchorGravity="top"/>

Obviously, replace the @+id/toolbar with the id of the Bottom Navigation Bar

Andy S
  • 143
  • 1
  • 3
3

For those using Material Component - this has been fixed by com.google.android.material:material:1.1.0-alpha09.

Available since 1.1.0-alpha05 : https://github.com/material-components/material-components-android/releases/tag/1.1.0-alpha05

Use android:elevation="4dp" to set elevation shadow.

Also, do not forget to set clipChildren="false" on your main layout, otherwise, the shadow will be overwritten.

Yohann L.
  • 1,262
  • 13
  • 27
guy.gc
  • 3,359
  • 2
  • 24
  • 39