Je travaille sur la disposition de la grille en utilisant recyclerview dans Android. La grille occupe une partie de l'écran et comporte une ombre. Pour obtenir l'effet d'ombre souhaité, j'utilise une valeur d'élévation de 12 dp. Mais cela ne semble pas fonctionner car je ne peux voir aucune élévation (ombre) de la grille. Pourquoi cela arrive-t-il? Recyclerview ne prend-il pas en charge l'altitude?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:id="@+id/activity_grid_layout"
Android:background="@drawable/gradient"
Android:layout_height="match_parent"
tools:context="com.mindhive.mindhive.activities.GridActivity">
<Android.support.v7.widget.RecyclerView
Android:id="@+id/grid_recycler_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginBottom="110dp"
Android:layout_marginLeft="15dp"
Android:layout_marginTop="80dp"
Android:background="@color/transparent"
Android:elevation="12dp"
Android:scrollIndicators="none"
Android:scrollbars="none"
Android:padding="0dp" />
<ImageView
Android:id="@+id/imageView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBottom="@+id/grid_recycler_view"
Android:layout_alignStart="@+id/grid_recycler_view"
Android:layout_marginBottom="-18dp"
Android:layout_marginStart="67dp"
Android:src="@drawable/main_filter"
Android:elevation="1dp" />
......
J'ai trouvé la réponse après un peu de recherche de ici . Le problème était le fond transparent. Elevation fonctionne uniquement avec des arrière-plans non transparents sur les vues. Pour résoudre ce problème, nous devons définir Android:outlineProvider="bounds"
sur la vue et Android:clipToPadding="false"
sur le parent de la vue.
J'espère que ça aide quelqu'un.
Pour Lollipop et vous pouvez utiliser la propriété Android: elevation, mais en dessous des versions de Lollipop, vous devez donner une ombre personnalisée.
card_background.xml
<?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="#CABBBBBB"/>
<corners Android:radius="2dp" />
</shape>
</item>
<item
Android:left="0dp"
Android:right="0dp"
Android:top="0dp"
Android:bottom="2dp">
<shape Android:shape="rectangle">
<solid Android:color="@Android:color/white"/>
<corners Android:radius="2dp" />
</shape>
</item>
</layer-list>
Donnez ce fichier comme arrière-plan à votre fichier inflage recyclerview qui fonctionnera correctement.
Android: Elevation n'applique que les ombres sur les appareils exécutant Lollipop ou une version ultérieure. Si vous souhaitez prendre en charge des appareils plus anciens, vous devez créer une ombre vous-même.