web-dev-qa-db-fra.com

"Android: elevation =" ne fonctionne pas sur les appareils antérieurs à Lollipop avec l'API de compilation 21

J'essaie d'utiliser "Android: elevation =" dans mon application, mais une fois que je l'utilise, il n'apparaît pas dans l'appareil avec 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"/>

peut-être que je ne compile pas correctement Lollipop pour les appareils pré-Lollipop, vous avez des suggestions?

Si vous avez besoin de voir d'autres parties du code, je vais modifier la question.

Merci

33
Aspicas

L'élévation nécessite que l'appareil exécute Lollipop. Voir cette réponse sur la façon de simuler une élévation https://stackoverflow.com/a/26747592/680249

13
drewi

MIS &AGRAVE; JOUR ::

  1. Meilleure pratique pour le faire est 

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

    et ajouter une bibliothèque pour cardview

    dependencies {
       ...
       compile 'com.Android.support:cardview-v7:21.0.+'
     }
    
  2. Sur Pre-Lollipop, vous pouvez utiliser ceci drawable

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

    cela vous donnera le look de l'élévation

  3. vous pouvez créer le vôtre comme ça

    <?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>
    

référence

20
Keyur Lakhani

Vous pouvez également utiliser un CardView de la bibliothèque de support Pour implémenter des surfaces.
Pour ce faire, ajoutez une dépendance à votre build.gradle: 

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

Et ensuite, utilisez-le simplement dans vos mises en page:

  <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>

Ici, vous avez beaucoup plus d'options à personnaliser comparant à En utilisant @Android:drawable/dialog_holo_light_frame en arrière-plan

MODIFIER:
Notez également que cette approche permet de simplement mettre en œuvre
Conception matérielle sur les appareils Pre-Lolipop .
Vous pouvez changer l’altitude,
autour des coins, etc.
Pour ce faire, vous devez:

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

Et n'oubliez pas d'ajouter xmlns:app="http://schemas.Android.com/apk/res-auto"à la mise en page racine.

Aussi, vous pouvez facilement changer l'altitude dans votre code:

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

Utilisez 8dp pour ramasser et 2dp pour vous reposer (normalement) et vous serez génial.

8
Leo Droidcoder

Comme décrit ici , vous pouvez imiter l’élévation avant Lollipop avec:

 Android:background="@Android:drawable/dialog_holo_light_frame"
0
Amir Rezazadeh