No Glimmer do Jetpack Compose, um ToggleButton é um componente interativo
que muda de aparência com base em um estado marcado. Os botões de ativação são
otimizados para óculos de exibição, oferecendo transições visuais claras em forma e
cor. Essas transições indicam quando uma ação ou configuração está ativa.
Use botões de alternância para expor ações que podem ser ativadas ou desativadas. Ao contrário das alternâncias somente com ícones, um botão de alternância mostra principalmente conteúdo de texto, embora ofereça suporte a slots de ícones opcionais para contexto adicional.
Para outros casos de uso, também há botões padrão e botões de ícone.
Anatomia
Um botão de alternância consiste em um contêiner que se transforma entre estados e um rótulo com ícones opcionais.
| Parte | Descrição |
|---|---|
Contêiner |
Anima entre um formato circular (desmarcado) e um retângulo arredondado (marcado). |
Rótulo |
Normalmente, um elemento combinável |
Ícones (opcional) |
Posições iniciais ou finais que podem variar de acordo com o estado. |
Tamanhos
Assim como os botões padrão, os botões de alternância oferecem suporte a duas variantes de tamanho:
| Tamanho | Altura mínima | Uso padrão |
|---|---|---|
Médio |
48 dp |
Tamanho interativo padrão. |
Grande |
72 dp |
Chaves principais ou de alta ênfase. |
Padrões de botão de ativação
Por padrão, os botões de alternância usam ToggleButtonDefaults.animateShape. Isso cria
uma transição suave entre os seguintes estados:
- Não marcada:
GlimmerTheme.shapes.large(normalmente umCircleShape). - Marcado:
ToggleButtonDefaults.CheckedShape(umRoundedCornerShapecom20.dpcantos).
A classe ToggleButtonColors gerencia a resolução de cores para os seguintes estados:
- Desmarcada: o padrão é
GlimmerTheme.colors.surface. - Marcada: o padrão é
GlimmerTheme.colors.surface.
Animação
Os botões de alternância usam os seguintes padrões para animação:
animateShape: fornece umShapeque interpola tamanhos de cantos usando uma especificação de animação de mola (stiffness = 600f).colors: uma função de fábrica para personalizar as cores de plano de fundo e conteúdo para os dois estados.CheckedShape: umRoundedCornerShape(20.dp)estático usado para o estado marcado.contentPadding: herda deButtonDefaults.contentPadding.
Exemplo: botão de ativação
O código a seguir cria um botão de alternância básico:
@Composable fun ToggleButtonSample() { var checked by remember { mutableStateOf(false) } val text = if (checked) "Toggle on" else "Toggle off" ToggleButton(checked = checked, onCheckedChange = { checked = it }) { Text(text) } }
Exemplo: botão de alternância com ícone principal
O código a seguir cria um botão de alternância com um ícone à esquerda:
@Composable fun ToggleButtonWithLeadingIconSample() { var checked by remember { mutableStateOf(false) } val text = if (checked) "Toggle on" else "Toggle off" ToggleButton( checked = checked, leadingIcon = { Icon(if (checked) FavoriteIcon else OutlinedFavoriteIcon, "Localized description") }, onCheckedChange = { checked = it }, ) { Text(text) } }