O elemento combinável Card funciona como um contêiner do Material Design para sua interface.
Os cards geralmente apresentam um único conteúdo coerente. Os exemplos a seguir mostram 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 distingue o Card de outros contêineres. Por exemplo, Scaffold fornece uma estrutura geral para uma tela inteira. Um card geralmente é um elemento de interface menor dentro de um layout maior, enquanto um componente de layout, como Column ou Row, oferece uma API mais simples e genérica.
Implementação básica
O Card se comporta de maneira muito parecida com outros contêineres no Compose. Você declara 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 para 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, fazendo com que ele pareça elevado acima do plano de fundo.colors: usa o tipoCardColorspara definir a cor padrão do contêiner e de todos os filhos.enabled: se você transmitirfalsepara esse parâmetro, o card vai aparecer como desativado e não vai responder à entrada do usuário.onClick: normalmente, umCardnão aceita eventos de clique. Assim, a principal sobrecarga que você precisa observar é aquela que define um parâmetroonClick. Use essa sobrecarga se quiser que sua implementação deCardresponda a pressionamentos do usuário.
O exemplo a seguir demonstra como usar esses parâmetros, bem como outros comuns, como shape e modifier.
Card preenchido
Confira um exemplo de como implementar um card preenchido.
A chave aqui é o uso da propriedade colors para mudar a cor de preenchimento.
@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 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.
Use a propriedade elevation para controlar a aparência da elevação e da 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 implementação aparece da seguinte maneira:
Card 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, ) } }
Esta implementação aparece da seguinte maneira:
Limitações
Os cards não vêm com ações de rolagem ou rejeição inerentes, mas podem ser integrados a
composables 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.