No Glimmer do Jetpack Compose, um Button é um componente interativo otimizado para entrada de óculos com tela virtual, oferecendo feedback visual claro nos estados para orientar as ações do usuário.
Os botões são criados no sistema de superfície do Glimmer do Jetpack Compose, que processa automaticamente propriedades físicas, como bordas e profundidade.
O botão padrão contém um rótulo de texto e ícones opcionais. Ele pode ser usado para ações principais ou secundárias. Há também botões especializados, como botões de ícone e botões de alternância, que são definidos como componentes separados no Glimmer do Jetpack Compose.
Padrão
Grande
Anatomia
Um botão consiste em um contêiner e um rótulo, com ícones opcionais à esquerda e à direita.
| Parte | Descrição |
|---|---|
Contêiner |
A superfície de plano de fundo do botão. |
Marcador |
O texto que descreve a ação. |
Ícone (opcional) |
Indicadores visuais à esquerda ou à direita. |
Tamanhos
Os botões do Glimmer do Jetpack Compose oferecem suporte a duas variantes de tamanho. Elas afetam a altura mínima e o preenchimento interno.
| Tamanho | Altura mínima | Uso padrão |
|---|---|---|
Médio |
48.dp |
Ações e listas padrão (padrão). |
Grande |
72.dp |
Ações de alta ênfase ou pontos de entrada da tela principal. |
Estados
Os botões no Glimmer do Jetpack Compose mudam a aparência para comunicar o estado.
- Ativado: o estado padrão de um botão interativo.
- Em foco: quando em foco, o botão aplica um
GlimmerTheme.depthEffectLevels.level1e um destaque de borda. - Pressionado: quando ativada, uma sobreposição branca semitransparente é aplicada à superfície.
- Desativado: o botão não responde à entrada e a aparência visual é ajustada.
Padrões de botão
Os padrões a seguir se aplicam a botões padrão:
- Por padrão, os botões usam
GlimmerTheme.typography.bodySmall. Confira se o texto nos botões é conciso e descreve claramente a ação. - O formato padrão de um botão é
GlimmerTheme.shapes.large. Esse arredondamento consistente ajuda os usuários a identificar botões na interface dos óculos com tela virtual.
Exemplo: botão com texto e ícones
Um botão básico inclui apenas um rótulo de texto, mas também é possível adicionar ícones ao início (usando leadingIcon) ou ao final (usando trailingIcon) do texto para fornecer contexto adicional.
O código a seguir cria um botão com um ícone à esquerda e à direita:
Button( onClick = { /* Handle navigation or action */ }, leadingIcon = { Icon(FavoriteIcon, contentDescription = null) }, trailingIcon = { Icon(SendIcon, contentDescription = null) } ) { Text("Text Label", style = GlimmerTheme.typography.titleSmall) }
Grupos de botões
O elemento combinável ButtonGroup permite agrupar botões em uma linha rolável
que funciona como um controlador de foco. À medida que o usuário rola a tela, o foco se move automaticamente para destacar o botão correspondente à posição de rolagem atual.
Exemplo: grupos de botões
ButtonGroup(modifier = Modifier.fillMaxWidth()) { Button(onClick = {}) { Text("Button 1") } Button(onClick = {}) { Text("Button 2") } Button(onClick = {}) { Text("Button 3") } Button(onClick = {}) { Text("Button 4") } Button(onClick = {}) { Text("Button 5") } }
Controle de foco em grupos de botões
É possível mover o foco para qualquer botão em um grupo para controlar manualmente a seleção.
Personalize e controle o comportamento de rolagem usando o estado ButtonGroup:
- Declare o estado com
rememberButtonGroupState. - Transmita-o para o elemento combinável
ButtonGroup. - Chame
animateScrollToItem(ouscrollToItempara rolagem instantânea) para rolar até um item específico e mover o foco automaticamente para ele.
O código a seguir move o foco de um botão para outro ao clicar:
val scope = rememberCoroutineScope() val state = rememberButtonGroupState() ButtonGroup(modifier = Modifier.fillMaxWidth(), state = state) { Button(onClick = { scope.launch { state.animateScrollToItem(1) } }) { Text("Select last item") } Button(onClick = { scope.launch { state.animateScrollToItem(0) } }) { Text("Select first item") } }