"android:elevation=" doesn't work on devices pre-Lollipop with compile API21 "android:elevation=" doesn't work on devices pre-Lollipop with compile API21 android android

"android:elevation=" doesn't work on devices pre-Lollipop with compile API21


UPDATED ::

  1. Best Practice to do that is

    <android.support.v7.widget.CardView>    <YourLayout></android.support.v7.widget.CardView>

    and add library for cardview

    dependencies {   ...   compile 'com.android.support:cardview-v7:21.0.+' }
  2. On Pre-Lollipop you can use this drawable

    android:background="@android:drawable/dialog_holo_light_frame"

    it will give you the look of elevation

  3. you can create your own like this

    <?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item><shape android:shape="rectangle">    <solid android:color="#BDBDBD"/>    <corners android:radius="5dp"/></shape></item><itemandroid:left="0dp"android:right="0dp"android:top="0dp"android:bottom="2dp"><shape android:shape="rectangle">    <solid android:color="#ffffff"/>    <corners android:radius="5dp"/></shape></item></layer-list>

reference


Elevation requires the device to run Lollipop. See this answer on how to simulate elevation https://stackoverflow.com/a/26747592/680249


You can also use a CardView from the support library to implement surfaces.
To do so add a dependency to your build.gradle:

compile 'com.android.support:cardview-v7:23.1.1'

And then simply use it in your layouts:

  <android.support.v7.widget.CardView      android:layout_width="match_parent"      android:layout_height="150dp"      android:layout_margin="16dp"      android:background="#fff"      >  </android.support.v7.widget.CardView>

Here you have a quite more options to customise it comparing to using @android:drawable/dialog_holo_light_frame as a background

EDIT:
Also notice, that this approach allows you to simply implement
Material Design on Pre-Lolipop devices.
You can change the elevation,
round the corners etc.
To do so you have to:

 app:cardElevation="8dp" app:cardCornerRadius="8dp" app:contentPadding="5dp">

And not forget to add xmlns:app="http://schemas.android.com/apk/res-auto"to the root layout.

Also you can easily change the elevation in your code:

CardView card = (CardView) findViewById(R.id.yourPreetyCoolCardView);card.setCardElevation(getResources()    .getDimension(R.dimen.card_picked_up_elevation));

Use 8dp for picked up and 2dp for resting (usual) state and you will be awesome.