问题
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
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.example.alvaro.proyectocaronte"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}
layout.xml
<RelativeLayout
android:layout_width="1100dp"
android:layout_height="fill_parent"
android:background="@drawable/rounded_corner"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="93dp"
android:layout_marginEnd="93dp"
android:elevation="3dp"/>
maybe I'm not compiling correctly Lollipop for pre-lollipop devices, Any suggestions?
If you need to see other parts of the code, I'll edit the question
Thanks
回答1:
Elevation requires the device to run Lollipop. See this answer on how to simulate elevation https://stackoverflow.com/a/26747592/680249
回答2:
UPDATED ::
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.+' }
On Pre-Lollipop you can use this drawable
android:background="@android:drawable/dialog_holo_light_frame"
it will give you the look of elevation
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
回答3:
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.
回答4:
As described here, you can mimic the elevation on pre-lollipop with:
android:background="@android:drawable/dialog_holo_light_frame"
来源:https://stackoverflow.com/questions/27693843/androidelevation-doesnt-work-on-devices-pre-lollipop-with-compile-api21