В Jetpack Compose Glimmer, GlimmerHorizontalPager — это отложенно создаваемый, горизонтально прокручиваемый макет, который упорядочивает страницы последовательно. Он похож на стандартный HorizontalPager из Compose Foundation, но адаптирован для очков отображения с поведением Glimmer и значениями по умолчанию.
По умолчанию одновременно отображается только одна страница. Для обеспечения удобства использования пейджер применяет анимацию привязки, благодаря которой страница всегда точно фиксируется в пределах видимой области после завершения прокрутки пользователем.

Основные параметры и варианты компоновки
Компонент GlimmerHorizontalPager предоставляет настраиваемые параметры для управления интервалами, выравниванием макета и отложенной загрузкой. Некоторые из этих параметров:
| Параметр | Описание |
|---|---|
| Объект |
| Отступы, применяемые вокруг границ всего содержимого после обрезки, полезны для добавления отступов по переднему или заднему краю перед первой страницей или после последней страницы. |
| Горизонтальное расстояние между отдельными страницами в пейджере. |
| Компонуемый слот для отображения индикатора активной страницы. По умолчанию используется |
| Количество страниц, которые необходимо скомпоновать и разместить за пределами видимой области просмотра в целях оптимизации предварительной загрузки. Избегайте установки больших значений, чтобы сохранить эффективность ленивой компоновки. |
Для получения информации обо всех доступных параметрах ознакомьтесь с полной справочной документацией .
Рекомендации по анимированному тексту
При анимации перехода между страницами и переходах на экранах дисплеев стандартная отрисовка текста может демонстрировать артефакты, связанные с привязкой пикселей. Установка TextMotion.Animated обеспечивает плавную отрисовку во всех анимациях компоновки:
Text( text = "Page: $page", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), )
Пример: Горизонтальный пейджер
Приведенный ниже код демонстрирует, как создать простую горизонтальную пейджерную панель с 10 страницами, разместив карточку на каждой странице:
// 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), ) } }
Основные моменты, касающиеся кода.
- State : Инициализирует
GlimmerPagerState, используяrememberGlimmerPagerState(pageCount = { 10 })для управления состоянием пейджера. - Содержимое слота страницы : получает индекс
pageвнутри лямбда-функцииGlimmerPagerScopeдля отображения каждой карточки. - Стиль текста с плавной анимацией : копирует
LocalTextStyle.currentи явно включаетTextMotion.Animated. - Автоматический индикатор страницы : В отличие от стандартных пейджеров Compose, требующих внешнего компонента индикатора,
GlimmerHorizontalPagerпо умолчанию автоматически встраивает индикатор страницы в виде точек.
Индикаторы страниц
По умолчанию GlimmerHorizontalPager отображает точечный индикатор страниц, используя GlimmerHorizontalPagerDefaults.PageIndicator . Индикатор автоматически адаптирует свою цветовую схему:
- Активная точка использует цвет содержимого, полученный из ближайшей окружающей
surface.
Вы можете передать пользовательский PageIndicator для указания конкретных цветов или заменить точку собственным пользовательским макетом:
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), ) } )