Tarjeta

El elemento componible Card actúa como un contenedor de Material Design para tu IU. En general, las tarjetas presentan un único contenido coherente. Los siguientes son algunos ejemplos de cuándo podrías usar una tarjeta:

  • Un producto en una app de compras
  • Una noticia en una app de noticias
  • Un mensaje en una app de comunicaciones.

Es el enfoque en representar una sola pieza de contenido que distingue a Card de otros contenedores. Por ejemplo, Scaffold proporciona la estructura general a toda una pantalla. Por lo general, la tarjeta es un elemento de la IU más pequeño dentro de un diseño más grande, mientras que un componente de diseño, como Column o Row, proporciona una API más simple y genérica.

Una tarjeta elevada con íconos y texto
Figura 1: Ejemplo de una tarjeta completada con íconos y texto

Implementación básica

Card se comporta de manera similar a otros contenedores en Compose. Para declarar su contenido, llama a otros elementos componibles dentro de él. Por ejemplo, observa cómo Card contiene una llamada a Text en el siguiente ejemplo mínimo:

@Composable
fun CardMinimalExample() {
    Card() {
        Text(text = "Hello, world!")
    }
}

Implementaciones avanzadas

Consulta la referencia para la definición de la API de Card. Define varios parámetros que te permiten personalizar el aspecto y el comportamiento del componente.

Estos son algunos parámetros clave que debes tener en cuenta:

  • elevation: Agrega una sombra al componente que lo hace parecer más alto que el fondo.
  • colors: Usa el tipo CardColors para establecer el color predeterminado del contenedor y de sus elementos secundarios.
  • enabled: Si pasas false para este parámetro, la tarjeta aparecerá como inhabilitada y no responderá a las entradas del usuario.
  • onClick: Por lo general, un Card no acepta eventos de clic. Por lo tanto, la sobrecarga principal que debes tener en cuenta es la que define un parámetro onClick. Debes usar esta sobrecarga si deseas que tu implementación de Card responda a las presiones del usuario.

En el siguiente ejemplo, se muestra cómo puedes usar estos parámetros y otros parámetros comunes, como shape y modifier.

Tarjeta completa

El siguiente es un ejemplo de cómo puedes implementar una tarjeta completa.

La clave aquí es el uso de la propiedad colors para cambiar el color relleno.

@Composable
fun FilledCardExample() {
    Card(
        colors = CardDefaults.cardColors(
            containerColor = MaterialTheme.colorScheme.surfaceVariant,
        ),
        modifier = Modifier
            .size(width = 240.dp, height = 100.dp)
    ) {
        Text(
            text = "Filled",
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

Esta implementación aparece de la siguiente manera:

Una tarjeta se completa con el color de la variante de superficie del tema de Material.
Figura 2: Ejemplo de una tarjeta completa.

Tarjeta elevada

En el siguiente fragmento, se muestra cómo implementar una tarjeta elevada. Usa el elemento componible ElevatedCard dedicado.

Puedes usar la propiedad elevation para controlar la apariencia de la elevación y la sombra resultante.

@Composable
fun ElevatedCardExample() {
    ElevatedCard(
        elevation = CardDefaults.cardElevation(
            defaultElevation = 6.dp
        ),
        modifier = Modifier
            .size(width = 240.dp, height = 100.dp)
    ) {
        Text(
            text = "Elevated",
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

Esta implementación aparece de la siguiente manera:

Una tarjeta se eleva sobre el fondo de la app, con una sombra.
Figura 3: Ejemplo de una tarjeta elevada.

Tarjeta con contorno

El siguiente es un ejemplo de una tarjeta con contorno. Usa el elemento componible OutlinedCard dedicado.

@Composable
fun OutlinedCardExample() {
    OutlinedCard(
        colors = CardDefaults.cardColors(
            containerColor = MaterialTheme.colorScheme.surface,
        ),
        border = BorderStroke(1.dp, Color.Black),
        modifier = Modifier
            .size(width = 240.dp, height = 100.dp)
    ) {
        Text(
            text = "Outlined",
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

Esta implementación aparece de la siguiente manera:

Una tarjeta está delineada con un borde negro delgado.
Figura 4: Ejemplo de una tarjeta con contorno.

Limitaciones

Las tarjetas no incluyen acciones de desplazamiento o descarte inherentes, pero se pueden integrar en elementos componibles que ofrecen estas funciones. Por ejemplo, si quieres implementar el gesto de deslizar para descartar en una tarjeta, intégrala con el elemento componible SwipeToDismiss. Para realizar la integración con el desplazamiento, usa modificadores de desplazamiento, como verticalScroll. Consulta la documentación de desplazamiento para obtener más información.

Recursos adicionales