O elemento combinável Card
atua como um contêiner do Material Design para a interface.
Os cards geralmente apresentam um único conteúdo coerente. Confira alguns exemplos de onde você pode usar um card:
- 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 em retratar um único conteúdo é o que diferencia
Card
de outros contêineres. Por exemplo, Scaffold
fornece a estrutura geral
de 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.
Implementação básica
O Card
se comporta de maneira semelhante a outros contêineres no Compose. Você declara o conteúdo dele
chamando outros elementos combináveis. 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 para ver a definição da API de Card
. Ele define vários
parâmetros que permitem personalizar a aparência e o comportamento do
componente.
Confira alguns parâmetros importantes:
elevation
: adiciona uma sombra ao componente que faz com que ele apareça acima do plano de fundo.colors
: usa o tipoCardColors
para definir a cor padrão do contêiner e de todos os filhos.enabled
: se você transmitirfalse
para esse parâmetro, o card vai aparecer como desativado e não vai responder à entrada do usuário.onClick
: normalmente, umCard
não aceita eventos de clique. Assim, a sobrecarga principal que você quer notar é aquela que define um parâmetroonClick
. Use essa sobrecarga se quiser que a implementação deCard
responda às pressões do usuário.
O exemplo a seguir demonstra como usar esses parâmetros, além de outros parâmetros comuns, como shape
e modifier
.
Card preenchido
Confira a seguir um exemplo de como implementar um card 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:
Card elevado
O snippet a seguir demonstra como implementar um card elevado. Use o
elemento combinável ElevatedCard
dedicado.
É possível 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:
Cartão com contorno
Confira a seguir um exemplo de card com contorno. Use o elemento combinável
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:
Limitações
Os cards não vêm com ações de rolagem ou dispensação inerentes, mas podem ser integrados a
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.