No Glimmer do Jetpack Compose, o Card componente serve como o contêiner principal
para conteúdo relacionado, criando um limite visual claro para unidades de informação digeríveis. Os cards são altamente adaptáveis, oferecendo suporte a combinações de conteúdo principal, títulos opcionais, subtítulos e ícones principais ou finais. Os cards preenchem a largura máxima disponível por padrão, são focalizáveis e também podem ser clicáveis. Os cards oferecem suporte a um arranjo vertical em que a imagem do cabeçalho fica na parte de cima, seguida pelo título, subtítulo e conteúdo do corpo.
Os cards são criados no sistema de superfície do Glimmer do Jetpack Compose surface system, portanto, eles herdam propriedades físicas, como efeitos de profundidade, recorte e destaques de borda consistentes.
Anatomia e slots
Um card do Glimmer do Jetpack Compose é criado com vários elementos especializados que permitem personalizar o conteúdo e o layout.
| Slot | Descrição |
|---|---|
Cabeçalho |
A seção superior do card, projetada para conter uma imagem. |
Título e subtítulo |
Esses campos de texto fornecem os rótulos principal e secundário do card. O título é colocado acima do subtítulo. |
Ícone principal |
Um ícone opcional (normalmente um |
Ícone final |
Um ícone opcional que aparece no final da área de conteúdo do card. |
Conteúdo principal |
O corpo principal do card para |
Padrões de card
Os seguintes padrões se aplicam aos cards:
- Largura: os cards preenchem a largura máxima disponível da tela para otimizar a legibilidade em óculos com tela virtual.
- Altura mínima:
80.dp - Espaçamento vertical do texto:
3.dp - Forma do cabeçalho: usa
RoundedCornerShapecom cantos24.dp - Padding de conteúdo: o padrão é
GlimmerTheme.componentSpacingValues.medium. Isso afeta o padding mais externo ao redor das imagens do cabeçalho e do contêiner de conteúdo. - Forma: o padrão é
GlimmerTheme.shapes.medium. Renderização de texto: usa os valores padrão de
GlimmerTheme.typographypara os seguintes slots:- Título:
bodyMedium - Subtítulo:
caption - Conteúdo principal:
bodySmall
- Título:
Exemplo: card básico
O código a seguir mostra o código mínimo necessário para criar um card:
Card { Text("This is a card") }
Exemplo: card com vários slots
O código a seguir mostra como usar vários slots juntos para criar um card:
Card( title = { Text("Card Title", style = GlimmerTheme.typography.titleMedium) }, subtitle = { Text("Sub-heading text", style = GlimmerTheme.typography.titleSmall) }, leadingIcon = { Icon(FavoriteIcon, contentDescription = "Favorite") }, trailingIcon = { Icon(BookmarkIcon, contentDescription = "Bookmark") }, header = { Image( painter = myHeaderImage, contentDescription = "Header image", contentScale = ContentScale.FillWidth ) }, ) { Text("This is a complete card") }
Pontos principais sobre o código
- Mostra como usar vários elementos de card, como
title,subtitleeleadingIcon, para personalizar o conteúdo e a estrutura do card. - Usa a
Cardsobrecarga comonClickpara tornar toda a superfície do card interativa.
Cards de ação
Se você quiser incluir um botão de ação com um card, use um
ActionCard. Os cards de ação têm os mesmos elementos que os cards padrão e também incluem um parâmetro action adicional que define o botão inferior.
ActionCard no Glimmer do Jetpack Compose.Exemplo: card de ação básico
Este código mostra como criar um ActionCard:
ActionCard( action = { Button(onClick = {}, trailingIcon = { Icon(FavoriteIcon, "Localized description") }) { Text("Send") } } ) { Text("This is a card with a title, leading icon, header image, and action") }
Exemplo: card de ação com um ícone
Este código mostra como criar um ActionCard mais complexo com ícones:
ActionCard( title = { Text("Card Title", style = GlimmerTheme.typography.titleMedium) }, subtitle = { Text("Sub-heading text", style = GlimmerTheme.typography.titleSmall) }, leadingIcon = { Icon(FavoriteIcon, contentDescription = "Favorite") }, header = { Image( painter = myHeaderImage, contentDescription = "Header image", contentScale = ContentScale.FillWidth ) }, action = { Button(onClick = { /* Handle action */ }) { Text("Action") } } ) { Text( "This is the main body content of the card, utilizing theme-tokens for consistent styling.", style = GlimmerTheme.typography.bodyMedium ) }