J'ai un layout XML:
<?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:id="@+id/containor"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#fff6da"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity">
<FrameLayout
Android:id="@+id/card"
Android:layout_width="220dp"
Android:layout_marginTop="10dp"
Android:layout_height="wrap_content">
<TextView
Android:background="@color/white"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:padding="10dp"
Android:text="Hello I am a text View." />
</FrameLayout>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="210dp"
Android:background="@drawable/select_delete_chim" />
</RelativeLayout>
qui fonctionne bien. Le résultat sera une vue d'image au-dessus de la disposition du cadre, mais lorsque j'utilise le XML suivant dans lequel j'ai remplacer la disposition du cadre par CardView:
<?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:id="@+id/containor"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#fff6da"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity">
<Android.support.v7.widget.CardView
Android:id="@+id/card"
Android:layout_width="220dp"
Android:layout_marginTop="10dp"
Android:layout_height="wrap_content">
<TextView
Android:background="@color/white"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:padding="10dp"
Android:text="Hello I am a text View." />
</Android.support.v7.widget.CardView>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="210dp"
Android:background="@drawable/select_delete_chim" />
</RelativeLayout>
le résultat sera alors: ImageView à l’arrière de CardView.
Une solution pour cela?
Une chose de plus, cela fonctionnera bien sur les appareils pré-Lollipop, mais sur Lollipop, cela ne fonctionnera pas.
Sortie avec CardView sur des appareils pré-Lollipop (sortie requise)
CardView a une élévation par défaut supérieure à ImageView. Nous devons donc ajouter une élévation supérieure dans ImageView à une élévation de CardView.
par exemple. imageView.setElevation(10);
and cardView.setElevation(5);
Maintenant, cela fonctionne bien sur tous les appareils.
Fais-le comme ça,
<Android.support.v7.widget.CardView
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/myCardView"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
card_view:cardBackgroundColor="@Android:color/transparent"
card_view:cardElevation="0dp">
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/ic_edit"
Android:background="@Android:color/transparent"/>
</Android.support.v7.widget.CardView>
Cela fera passer la ImageView
.
Write Image view Ci-dessus, cardview, espérons-le résoudre le problème
<?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:id="@+id/containor"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#fff6da"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity">
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="210dp"
Android:src="@drawable/select_delete_chim" />
<Android.support.v7.widget.CardView
Android:id="@+id/card"
Android:layout_width="220dp"
Android:layout_marginTop="10dp"
Android:layout_height="wrap_content">
<TextView
Android:background="@color/white"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:padding="10dp"
Android:text="Hello I am a text View." />
</Android.support.v7.widget.CardView>
</RelativeLayout>
Voici une réponse complète à votre question Vous pouvez envelopper CardView avec un FrameLayout et placer un ImageView en dehors du parent de CardView comme celui-ci.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ...>
<FrameLayout...>
<Android.support.v7.widget.CardView...>
<Content/>
</Android.support.v7.widget.CardView>
</FrameLayout>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
... />
</RelativeLayout>
sinon, voici le code Java qui prend en charge les versions Android ci-dessous et après Lollipop
image.bringToFront();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
image.setElevation(10);
}
cela amènera l'image à l'avant
Ajouter simplement app:cardElevation="-1dp"
à la CardView
dans votre fichier xml résoudra le problème.