web-dev-qa-db-fra.com

Comment amener imageView devant cardview? Quand les deux sont des enfants de la disposition relative

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)

Sortie avec CardView sur des appareils Lollipop

15
Vatish Sharma

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.

40
Vatish Sharma

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.

2
priyanka

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

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

1
Nick Sherbina

Ajouter simplement app:cardElevation="-1dp" à la CardView dans votre fichier xml résoudra le problème.

0
W. Seun