In Jetpack Compose Glimmer, GlimmerHorizontalPager è un layout a composizione pigra
e scorrevole orizzontalmente che dispone le pagine in sequenza.
È simile allo standard HorizontalPager presente in Compose
Foundation, ma è personalizzato per gli occhiali con display con comportamenti e
valori predefiniti di Glimmer.
Per impostazione predefinita, viene visualizzata in modo prominente una sola pagina alla volta. Per offrire un'esperienza ottimale, il pager utilizza animazioni di snap per garantire che una pagina si posizioni sempre esattamente nei limiti della finestra di visualizzazione al termine del gesto di scorrimento dell'utente.
GlimmerHorizontalPager.Parametri chiave e opzioni di layout
Un GlimmerHorizontalPager fornisce parametri personalizzabili per controllare la spaziatura, l'allineamento del layout e il caricamento lento. Alcuni di questi parametri sono:
| Parametro | Descrizione |
|---|---|
|
Un oggetto |
|
Spazio interno applicato ai limiti dei contenuti complessivi dopo il ritaglio, utile per aggiungere uno spazio interno sul bordo iniziale o finale prima della prima pagina o dopo l'ultima pagina. |
|
La spaziatura orizzontale tra le singole pagine del pager. |
|
Uno slot componibile che esegue il rendering dell'indicatore della pagina attiva. Il valore predefinito è |
|
Il numero di pagine da comporre e disporre oltre la finestra di visualizzazione visibile come ottimizzazione del precaricamento. Evita di impostare valori elevati per preservare l'efficienza della composizione pigra. |
Per informazioni su tutti i parametri disponibili , consulta la documentazione di riferimento completa.
Consigli per il movimento del testo animato
Durante le animazioni di snap e le transizioni del pager sugli occhiali con display, il rendering del testo predefinito può mostrare artefatti di pixel-snapping. L'impostazione di TextMotion.Animated garantisce un rendering uniforme durante le animazioni del layout:
Text( text = "Page: $page", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), )
Esempio: pager orizzontale
Il seguente codice mostra come creare un pager orizzontale di base con 10 pagine, inserendo una scheda in ogni pagina:
// 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), ) } }
Punti chiave sul codice
- Stato: inizializza un
GlimmerPagerStateutilizzandorememberGlimmerPagerState(pageCount = { 10 })per gestire lo stato del pager. - Contenuto dello slot della pagina: riceve l'indice della pagina
pageall'interno dellaGlimmerPagerScopelambda per eseguire il rendering di ogni scheda. - Stile del testo dell'animazione fluida: copia
LocalTextStyle.currente attiva esplicitamenteTextMotion.Animated. - Indicatore di pagina automatico: a differenza dei pager Compose standard che richiedono
un componente indicatore esterno,
GlimmerHorizontalPagerincorpora automaticamente un indicatore di pagina in stile punto per impostazione predefinita.
Indicatori di pagina
Per impostazione predefinita, GlimmerHorizontalPager esegue il rendering di un indicatore di pagina basato su punti utilizzando
GlimmerHorizontalPagerDefaults.PageIndicator. L'indicatore adatta automaticamente la combinazione di colori:
- Il punto attivo utilizza il colore dei contenuti risolto dalla circostante più vicina
surface.
Puoi passare un PageIndicator personalizzato per specificare colori espliciti o sostituire il punto con il tuo layout personalizzato:
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), ) } )