Cómo traer imageView delante de cardview? Cuando ambos son de Disposición Relativa childs
Tengo una disposición 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>
Que funciona bien. El resultado será una vista de la imagen encima de la disposición del marco pero cuando utilizo el xml siguiente en cuál he cambian la disposición del marco con CardView:
- Android ScrollView recorte sombra de elevación de niño
- ¿Por qué no puedo establecer la elevación en una vista que agrego mediante programación?
- Cambiar la elevación de la barra de acción por tema
- No se muestra la elevación de Android de View en CardView
- ¿Cómo puedo obtener un elemento ListView para ser elevado?
<?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>
Entonces el resultado será: ImageView en la parte posterior de CardView.
¿Alguna solución para esto?
Una cosa más, funcionará bien en los dispositivos pre-lollipop pero en lollipop no funciona.
Salida con CardView en dispositivos pre-lollipop (salida requerida)
Salida con CardView en dispositivos lollipop
- Elevación en Android 5.0 (Lollipop) no funciona
- Android "elevación" no está mostrando una sombra en un CustomView
- Cómo cambiar la dirección de la sombra de elevación de Android?
- Android Ripple Effect + Elevación en las vistas que no son de botón
- ¿Cómo mostrar la sombra de la barra de herramientas y la barra de herramientas de la biblioteca de soporte en todas las versiones de Android?
- Diferencia entre elevación y translaciónZ
- Android: dos vistas con la misma elevación lado a lado
- Dibujar sombras de elevación sobre lienzo
CardView tiene una elevación por defecto que es mayor que ImageView, por lo que tenemos que añadir una mayor elevación en ImageView que la elevación de CardView.
Por ejemplo imageView.setElevation(10);
Y cardView.setElevation(5);
Ahora, su funcionamiento muy bien en todos los dispositivos.
Escribe esta línea en tu código java después de inicializar ImageView
.
imageView.bringToFront();
Escriba la vista de la imagen Sobre cardview, esperanzadamente resuelve el problema
<?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>
Hazlo asi,
<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>
Traerá el ImageView
al frente.