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

后端 未结 4 468
后悔当初
后悔当初 2020-12-14 14:34

I\'m trying to use \"android: elevation =\" in my application but once I run it does not appear in the device with android 4.1.2

gradle

相关标签:
4条回答
  • 2020-12-14 15:08

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

    0 讨论(0)
  • 2020-12-14 15:08

    As described here, you can mimic the elevation on pre-lollipop with:

     android:background="@android:drawable/dialog_holo_light_frame"
    
    0 讨论(0)
  • 2020-12-14 15:20

    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>
      
      <item
      android: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

    0 讨论(0)
  • 2020-12-14 15:22

    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.

    0 讨论(0)
提交回复
热议问题