捕捉到索引 Lazyrow
Snap to an index Lazyrow
我正在使用 lazyRow 制作日历。我现在遇到的问题是,我希望行在一定的滚动量后捕捉到索引,这样它就不可能卡在索引之间。有办法吗?
LazyRow(state = calendarViewModel.listState, modifier = Modifier.fillMaxWidth()) {
calendarYears.forEach {
items(it.months.count()) { index ->
calendarViewModel.onEvent(CalendarEvent.ClickedMenuItem(index))
CalendarRowItem(
modifier = Modifier.fillParentMaxWidth(),
calendarSize = it.months[index].amountOfDays,
initWeekday = it.months[index].startDayOfMonth.ordinal,
textColor = MaterialTheme.colors.secondaryVariant,
clickedColor = MaterialTheme.colors.primary,
textStyle = MaterialTheme.typography.body1
)
}
}
}
您可以使用 accompanist library 中的 HorizontalPager
,它提供了这种投掷行为 out-of-the-box,它在内部使用 LazyRow
。
另一种选择是使用 Snapper library created by @chris-banes
在你的 build.gradle
.
添加依赖
dependencies {
implementation "dev.chrisbanes.snapper:snapper:<version>"
}
并在您的 LazyRow
中使用它。
val lazyListState = rememberLazyListState()
LazyRow(
state = lazyListState,
flingBehavior = rememberSnapperFlingBehavior(lazyListState),
) {
// content
}
结果:
我正在使用 lazyRow 制作日历。我现在遇到的问题是,我希望行在一定的滚动量后捕捉到索引,这样它就不可能卡在索引之间。有办法吗?
LazyRow(state = calendarViewModel.listState, modifier = Modifier.fillMaxWidth()) {
calendarYears.forEach {
items(it.months.count()) { index ->
calendarViewModel.onEvent(CalendarEvent.ClickedMenuItem(index))
CalendarRowItem(
modifier = Modifier.fillParentMaxWidth(),
calendarSize = it.months[index].amountOfDays,
initWeekday = it.months[index].startDayOfMonth.ordinal,
textColor = MaterialTheme.colors.secondaryVariant,
clickedColor = MaterialTheme.colors.primary,
textStyle = MaterialTheme.typography.body1
)
}
}
}
您可以使用 accompanist library 中的 HorizontalPager
,它提供了这种投掷行为 out-of-the-box,它在内部使用 LazyRow
。
另一种选择是使用 Snapper library created by @chris-banes
在你的 build.gradle
.
dependencies {
implementation "dev.chrisbanes.snapper:snapper:<version>"
}
并在您的 LazyRow
中使用它。
val lazyListState = rememberLazyListState()
LazyRow(
state = lazyListState,
flingBehavior = rememberSnapperFlingBehavior(lazyListState),
) {
// content
}
结果: