升级到 v0.19.0 后如何禁用拖动撰写分页器?

Jun*_*ung 8 android android-jetpack-compose

如标题所示,Android Compose Pager 布局在v0.19.0之后删除了DragEnabled。还有其他方法可以禁用拖动寻呼机吗?

指南: https: //google.github.io/accompanist/pager/

Phi*_*hov 20

从 Accompanist 0.24.1-alpha开始,它需要 Compose 版本1.2.0-alpha02或更高版本,userScrollEnabled因此添加了参数:

HorizontalPager(
    userScrollEnabled = false
) {
}
Run Code Online (Sandbox Code Playgroud)

它需要 Compose 1.2.0-alpha01,因为在此版本中,相同的功能已添加到位于 Accompanist Pager 下的LazyColumn/ 。LazyRow


如果您使用的是 Compose 1.1.0 或更早版本,则可以使用以下解决方案:

从0.19.0版开始,伴奏寻呼机已被重写为基于LazyRowLazyColumn

惰性视图暂时不支持禁用滚动,您可以为此问题加注星标,以引起更多人对该问题的关注并关注更新。

现在有一个解决方法:

private val VerticalScrollConsumer = object : NestedScrollConnection {
    override fun onPreScroll(available: Offset, source: NestedScrollSource) = available.copy(x = 0f)
    override suspend fun onPreFling(available: Velocity) = available.copy(x = 0f)
}

private val HorizontalScrollConsumer = object : NestedScrollConnection {
    override fun onPreScroll(available: Offset, source: NestedScrollSource) = available.copy(y = 0f)
    override suspend fun onPreFling(available: Velocity) = available.copy(y = 0f)
}

fun Modifier.disabledVerticalPointerInputScroll(disabled: Boolean = true) =
    if (disabled) this.nestedScroll(VerticalScrollConsumer) else this

fun Modifier.disabledHorizontalPointerInputScroll(disabled: Boolean = true) =
    if (disabled) this.nestedScroll(HorizontalScrollConsumer) else this
Run Code Online (Sandbox Code Playgroud)

用法:

HorizontalPager(
    count = 10,
    modifier = Modifier.disabledHorizontalPointerInputScroll()
) {
    //...
}
Run Code Online (Sandbox Code Playgroud)