HorizontalPageIndicator
A horizontal indicator for a Pager, representing the currently active page and total pages drawn
HorizontalPageIndicator
Composable Component
A horizontal indicator for a Pager, representing the currently active page and total pages drawn
using a Shape. It shows up to 6 pages on the screen and doesn't represent the exact page index
if there are more than 6 pages. Instead of showing the exact position, HorizontalPageIndicator
shows a half-size indicator on the left or on the right if there are more pages.
Android
@Composable
public fun HorizontalPageIndicator(
pageIndicatorState: PageIndicatorState,
modifier: Modifier = Modifier,
indicatorStyle: PageIndicatorStyle = PageIndicatorDefaults.style(),
selectedColor: Color = MaterialTheme.colors.onBackground,
unselectedColor: Color = selectedColor.copy(alpha = 0.3f),
indicatorSize: Dp = 6.dp,
spacing: Dp = 4.dp,
indicatorShape: Shape = CircleShape,
)
Parameters
| pageIndicatorState | The state object of a HorizontalPageIndicator to be used to observe the Pager's state. |
| modifier | Modifier to be applied to the HorizontalPageIndicator |
| indicatorStyle | The style of HorizontalPageIndicator - may be linear or curved. By default determined by the screen shape. |
| selectedColor | The color of the selected HorizontalPageIndicator item |
| unselectedColor | The color of unselected HorizontalPageIndicator items. Defaults to selectedColor with 30% alpha |
| indicatorSize | The size of each HorizontalPageIndicator item in Dp |
| spacing | The spacing between indicator items in Dp |
| indicatorShape | The shape of each HorizontalPageIndicator item. Defaults to CircleShape |
Code Examples
HorizontalPageIndicatorSample
@Composable
fun HorizontalPageIndicatorSample() {
val maxPages = 9
var selectedPage by remember { mutableStateOf(0) }
var finalValue by remember { mutableStateOf(0) }
val animatedSelectedPage by
animateFloatAsState(targetValue = selectedPage.toFloat()) { finalValue = it.toInt() }
val pageIndicatorState: PageIndicatorState = remember {
object : PageIndicatorState {
override val pageOffset: Float
get() = animatedSelectedPage - finalValue
override val selectedPage: Int
get() = finalValue
override val pageCount: Int
get() = maxPages
}
}
Box(modifier = Modifier.fillMaxSize().padding(6.dp)) {
InlineSlider(
modifier = Modifier.align(Alignment.Center),
value = selectedPage,
increaseIcon = { Icon(InlineSliderDefaults.Increase, "Increase") },
decreaseIcon = { Icon(InlineSliderDefaults.Decrease, "Decrease") },
valueProgression = 0 until maxPages,
onValueChange = { selectedPage = it },
)
HorizontalPageIndicator(pageIndicatorState = pageIndicatorState)
}
}