Android
CardView
Buscar..
Introducción
Un FrameLayout con una esquina redondeada de fondo y sombra.
CardView usa la propiedad de elevación en Lollipop para las sombras y recurre a una implementación de sombra emulada personalizada en plataformas más antiguas.
Debido a la naturaleza costosa del recorte de esquinas redondeadas, en plataformas antes de Lollipop, CardView no recorta sus elementos secundarios que se intersecan con esquinas redondeadas. En su lugar, agrega relleno para evitar dicha intersección (consulte setPreventCornerOverlap (booleano) para cambiar este comportamiento).
Parámetros
Parámetro | Detalles |
---|---|
cardBackgroundColor | Color de fondo para CardView. |
cardCornerRadius | Radio de esquina para CardView. |
TarjetaElevación | Elevación para CardView. |
cardMaxElevation | Elevación máxima para CardView. |
cardPreventCornerOverlap | Agregue relleno a CardView en v20 y antes para evitar las intersecciones entre el contenido de la Tarjeta y las esquinas redondeadas. |
cardUseCompatPadding | Agregue el relleno en API v21 + también para tener las mismas medidas con versiones anteriores. Puede ser un valor booleano, como "verdadero" o "falso". |
contentPadding | Acolchado interior entre los bordes de la tarjeta y los hijos de la CardView. |
contentPaddingBottom | Acolchado interno entre el borde inferior de la tarjeta y los elementos secundarios de CardView. |
contentPaddingLeft | Acolchado interno entre el borde izquierdo de la Tarjeta y los hijos de la CardView. |
contentPaddingRight | Elevación para CardView. |
TarjetaElevación | Acolchado interno entre el borde derecho de la Tarjeta y los hijos de la CardView. |
contentPaddingTop | Acolchado interno entre el borde superior de la tarjeta y los hijos de la CardView. |
Observaciones
CardView
utiliza la elevación real y las sombras dinámicas en Lollipop (API 21) y superior. Sin embargo, antes de que Lollipop CardView
a una implementación instantánea programática.
Si intenta hacer que un ImageView
encaje dentro de las esquinas redondeadas de un CardView
, puede notar que no parece correcto antes del Lollipop (API 21). Para solucionar este problema, debe llamar a setPreventCornerOverlap(false)
en su CardView
, o agregar la app:cardPreventCornerOverlap="false"
a su diseño.
Antes de usar CardView
, debe agregar la dependencia de la biblioteca de soporte en el archivo build.gradle
:
dependencies{
compile 'com.android.support:cardview-v7:25.2.0'
}
Un número de la última versión se puede encontrar aquí
Documentación oficial:
https://developer.android.com/reference/android/support/v7/widget/CardView.html https://developer.android.com/training/material/lists-cards.html
Empezando con CardView
CardView
es miembro de la biblioteca de soporte de Android y proporciona un diseño para tarjetas.
Para agregar CardView
a su proyecto, agregue la siguiente línea a sus dependencias de build.gradle
.
compile 'com.android.support:cardview-v7:25.1.1'
Un número de la última versión se puede encontrar aquí
En su diseño, puede agregar lo siguiente para obtener una tarjeta.
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- one child layout containing other layouts or views -->
</android.support.v7.widget.CardView>
Luego puede agregar otros diseños dentro de este y se incluirán en una tarjeta.
Además, CardView se puede rellenar con cualquier elemento de la interfaz de usuario y se puede manipular desde el código .
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/card_view"
android:layout_margin="5dp"
card_view:cardBackgroundColor="#81C784"
card_view:cardCornerRadius="12dp"
card_view:cardElevation="3dp"
card_view:contentPadding="4dp" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" >
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/item_image"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginRight="16dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_title"
android:layout_toRightOf="@+id/item_image"
android:layout_alignParentTop="true"
android:textSize="30sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_detail"
android:layout_toRightOf="@+id/item_image"
android:layout_below="@+id/item_title"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
Personalizando el CardView
CardView proporciona una elevación y un radio de esquina predeterminados para que las tarjetas tengan una apariencia uniforme en las plataformas.
Puede personalizar estos valores predeterminados utilizando estos atributos en el archivo xml:
-
card_view:cardElevation
atributocard_view:cardElevation
agrega elevación en CardView. -
card_view:cardBackgroundColor
atributocard_view:cardBackgroundColor
se usa para personalizar el color de fondo del fondo de CardView (puedes darle cualquier color). -
card_view:cardCornerRadius
atributocard_view:cardCornerRadius
se usa para curvar 4 bordes de CardView -
card_view:contentPadding
atributocard_view:contentPadding
agrega el relleno entre la tarjeta y los hijos de la tarjeta
Nota: card_view es un espacio de nombres definido en la vista de diseño principal superior. xmlns: card_view = " http://schemas.android.com/apk/res-auto "
Aquí un ejemplo:
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardElevation="4dp"
card_view:cardBackgroundColor="@android:color/white"
card_view:cardCornerRadius="8dp"
card_view:contentPadding="16dp">
<!-- one child layout containing other layouts or views -->
</android.support.v7.widget.CardView>
También puedes hacerlo mediante programación:
card.setCardBackgroundColor(....);
card.setCardElevation(...);
card.setRadius(....);
card.setContentPadding();
Compruebe el javadoc oficial para propiedades adicionales.
Añadiendo animación de rizo
Para habilitar la animación ripple en un CardView, agregue los siguientes atributos:
<android.support.v7.widget.CardView
...
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground">
...
</android.support.v7.widget.CardView>
Uso de imágenes como fondo en CardView (problemas con el dispositivo Pre-Lollipop)
Mientras usa Imagen / Color como fondo en un CardView, puede terminar con pequeños rellenos blancos (si el color predeterminado de la Tarjeta es blanco) en los bordes. Esto ocurre debido a las esquinas redondeadas predeterminadas en la Vista de tarjeta. Aquí es cómo evitar esos márgenes en dispositivos Pre-lollipop.
Necesitamos usar un atributo card_view:cardPreventCornerOverlap="false"
en el CardView. 1). En XML usa el siguiente fragmento de código.
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
card_view:cardPreventCornerOverlap="false"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/row_wallet_redeem_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/bg_image" />
</android.support.v7.widget.CardView>
- En Java como esta
cardView.setPreventCornerOverlap(false)
.
Al hacerlo, elimina un relleno no deseado en los bordes de la Tarjeta. Aquí hay algunos ejemplos visuales relacionados con esta implementación.
1 tarjeta con fondo de imagen en API 21 (perfectamente bien)
2 Tarjeta con fondo de imagen en API 19 sin atributo (observe los rellenos alrededor de la imagen)
3 Tarjeta FIJA con fondo de imagen en API 19 con atributo cardView.setPreventCornerOverlap(false)
(Problema ahora solucionado)
Lea también sobre esto en Documentación aquí
Publicación original de SOF aquí
Animar CardView color de fondo con TransitionDrawable
public void setCardColorTran(CardView card) {
ColorDrawable[] color = {new ColorDrawable(Color.BLUE), new ColorDrawable(Color.RED)};
TransitionDrawable trans = new TransitionDrawable(color);
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
card.setBackground(trans);
} else {
card.setBackgroundDrawable(trans);
}
trans.startTransition(5000);
}