No Jetpack Compose Glimmer, GlimmerHorizontalPager é um layout composto de forma lenta
e rolável horizontalmente que organiza as páginas sequencialmente.
Ele é semelhante ao padrão HorizontalPager encontrado no Compose Foundation, mas personalizado para óculos com tela virtual com comportamentos e valores padrão do Glimmer.
Por padrão, apenas uma página é exibida de forma proeminente por vez. Para oferecer uma experiência refinada, o pager usa animações de ajuste para garantir que uma página sempre se ajuste exatamente aos limites da janela de visualização após o gesto de rolagem de um usuário.
GlimmerHorizontalPager.Parâmetros e opções de layout principais
Um GlimmerHorizontalPager oferece parâmetros personalizáveis para controlar o espaçamento, o alinhamento do layout e o carregamento lento. Alguns desses parâmetros são:
| Parâmetro | Descrição |
|---|---|
|
Um |
|
Padding aplicado aos limites gerais do conteúdo após o recorte, útil para adicionar padding de borda inicial ou final antes da primeira página ou depois da última. |
|
O espaçamento horizontal entre páginas individuais no pager. |
|
Um slot combinável que renderiza o indicador de página ativa. O padrão é |
|
O número de páginas a serem compostas e dispostas além da janela de visualização visível como uma otimização de pré-carregamento. Evite definir valores grandes para preservar a eficiência da composição lenta. |
Consulte a documentação de referência completa para informações sobre todos os parâmetros disponíveis.
Recomendação de movimento de texto animado
Durante as animações de ajuste e transições do pager em óculos com tela virtual, a renderização de texto padrão pode apresentar artefatos de ajuste de pixels. A configuração TextMotion.Animated garante uma renderização suave em animações de layout:
Text( text = "Page: $page", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), )
Exemplo: pager horizontal
O código a seguir demonstra como criar um pager horizontal básico com 10 páginas, colocando um card dentro de cada página:
// Hoist the pager state, specifying the total page count with a lambda. val pagerState = rememberGlimmerPagerState(pageCount = { 10 }) GlimmerHorizontalPager( state = pagerState, modifier = Modifier.fillMaxSize(), ) { page -> // Use Glimmer components like Card and Text for optimized glasses styling. Card(modifier = Modifier.fillMaxWidth()) { Text( text = "Page: $page", // Recommended: use TextMotion.Animated for smooth transitions in a pager. style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), ) } }
Principais pontos sobre o código
- Estado: inicializa um
GlimmerPagerStateusandorememberGlimmerPagerState(pageCount = { 10 })para gerenciar o estado do pager. - Conteúdo do slot de página: recebe o índice da página
pagedentro daGlimmerPagerScopelambda para renderizar cada card. - Estilo de texto de animação suave: copia
LocalTextStyle.currente ativa explicitamenteTextMotion.Animated. - Indicador de página automático: ao contrário dos pagers padrão do Compose que exigem
um componente indicador externo,
GlimmerHorizontalPagerincorpora automaticamente um indicador de página de estilo de ponto por padrão.
Indicadores de página
Por padrão, GlimmerHorizontalPager renderiza um indicador de página baseado em pontos usando
GlimmerHorizontalPagerDefaults.PageIndicator. O indicador adapta automaticamente o esquema de cores:
- O ponto ativo usa a cor do conteúdo resolvida da
surfacecircundante mais próxima.
Você pode transmitir um PageIndicator personalizado para especificar cores explícitas ou substituir o ponto pelo seu próprio layout personalizado:
GlimmerHorizontalPager( state = pagerState, modifier = Modifier.fillMaxSize(), // Use a page numbers instead of the default dot-indicator pageIndicator = { Text( text = "${pagerState.currentPage + 1} / ${pagerState.pageCount}", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), ) } )