Card

O elemento combinável Card atua como um contêiner do Material Design para sua interface. Os cards normalmente apresentam um único conteúdo coerente. Confira abaixo alguns exemplos de onde é possível usar um cartão:

  • Um produto em um app de compras.
  • Uma notícia em um app de notícias.
  • Uma mensagem em um app de comunicação.

O foco é retratar um único conteúdo que distingue Card de outros contêineres. Por exemplo, Scaffold fornece uma estrutura geral para uma tela inteira. O card geralmente é um elemento de interface menor dentro de um layout maior, enquanto um componente de layout, como Column ou Row, fornece uma API mais simples e genérica.

Um card elevado preenchido com texto e ícones.
Figura 1. Um exemplo de card preenchido com texto e ícones.

Implementação básica

O Card se comporta de maneira semelhante a outros contêineres no Compose. Declare o conteúdo dele chamando outros elementos combináveis dentro dele. Por exemplo, considere como Card contém uma chamada para Text no exemplo mínimo a seguir:

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

Implementações avançadas

Consulte a referência da definição da API de Card. Ele define vários parâmetros que permitem personalizar a aparência e o comportamento do componente.

Alguns parâmetros importantes são:

  • elevation: adiciona uma sombra ao componente para que ele pareça elevado acima do plano de fundo.
  • colors: usa o tipo CardColors para definir a cor padrão do contêiner e de qualquer filho.
  • enabled: se você transmitir false para esse parâmetro, o card vai aparecer como desativado e não responderá à entrada do usuário.
  • onClick: normalmente, uma Card não aceita eventos de clique. Dessa forma, a sobrecarga principal que você quer observar é aquela que define um parâmetro onClick. Use essa sobrecarga se quiser que a implementação de Card responda aos pressionamentos do usuário.

O exemplo a seguir demonstra como usar esses e outros parâmetros comuns, como shape e modifier.

Cartão preenchido

Confira abaixo um exemplo de como implementar um cartão preenchido.

A chave aqui é o uso da propriedade colors para mudar a cor preenchida.

@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,
        )
    }
}

Essa implementação aparece da seguinte maneira:

Um card é preenchido com a cor da variante de superfície do tema do Material Design.
Figura 2. Exemplo de um card preenchido.

cartão elevado

O snippet a seguir demonstra como implementar um card elevado. Use o elemento combinável ElevatedCard dedicado.

Você pode usar a propriedade elevation para controlar a aparência da elevação e a 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,
        )
    }
}

Essa implementação aparece da seguinte maneira:

Um card é elevado acima do segundo plano do app com uma sombra.
Figura 3. Exemplo de cartão elevado.

Cartão contornado

Confira a seguir um exemplo de card descrito. Use o elemento 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,
        )
    }
}

Essa implementação aparece da seguinte maneira:

Um cartão é contornado com uma borda preta fina.
Figura 4. Exemplo de um card com detalhes.

Limitações

Os cards não vêm com ações inerentes de rolagem ou dispensar, mas podem se integrar a elementos combináveis que oferecem esses recursos. Por exemplo, para implementar o gesto de deslizar para dispensar em um card, integre-o ao elemento combinável SwipeToDismiss. Para integrar com a rolagem, use modificadores de rolagem, como verticalScroll. Consulte a documentação de rolagem para mais informações.

Outros recursos