嵌套于HorizontalPager的LazyRow滚动后无法立即点击项
问题解答
这种现象是正常的,属于Jetpack Compose滚动组件的默认设计行为。
原因分析
当你快速滚动LazyRow到首尾边界时,组件会触发**弹性滚动(Overscroll)**的惯性动画,这段时间内触摸事件会被滚动容器的触摸拦截机制优先处理——系统会先完成滚动的收尾动画,防止误触干扰滚动体验,因此1-2秒内点击事件无法传递给clickable修饰的子组件。
Compose的滚动容器(LazyRow、HorizontalPager等)都依赖ScrollableState管理滚动状态,边界处的弹性滚动是默认启用的交互逻辑,目的是让滚动体验更自然流畅。
解决方案(可选)
如果需要消除这个延迟,可以禁用LazyRow的弹性滚动效果:
Column(modifier = Modifier.fillMaxSize()) { HorizontalPager(pageCount = 2) { when (it) { 0 -> { LazyRow( scrollBehavior = ScrollDefaults.rememberScrollBehavior( overscrollEffect = null // 禁用边界弹性滚动 ) ) { items(20) { Spacer(modifier = Modifier.width(10.dp)) Box(modifier = Modifier .size(60.dp) .background(Color.Red) .clickable { } ) Spacer(modifier = Modifier.width(10.dp)) } } } 1 -> { Box(modifier = Modifier.fillMaxSize()) } } } }
禁用后,滚动到边界时不会有弹性动画,点击事件会立即触发,但滚动的手感会稍有变化。
内容的提问来源于stack exchange,提问作者Long Nguyen
相关产品推荐
相关产品推荐

