Compose的滚动布局(五)

一、前言

首先在Compose中是没有滚动布局的,只有滚动修饰符verticalScrollhorizontalScroll。通过使用这两个修饰符来修饰布局时候,可以使布局进行滚动

二、参考示例

以下是一个垂直列表滚动的例子

@Composable
fun ScrollBoxes() {
    Column(
        modifier = Modifier
            .background(Color.LightGray)
            .size(100.dp)
            .verticalScroll(rememberScrollState())
    ) {
        repeat(10) {
            Text("Item $it", modifier = Modifier.padding(2.dp))
        }
    }
}

三、ScrollState

如果我们想要主动滚动列表或者获取一些滚动状态的话,可以使用ScrollState。将以上代码修改为以下方式

 @Composable
    private fun nestingScroll(){
        val gradient = Brush.verticalGradient(0f to Color.Gray, 1000f to Color.White)
        Box(
            modifier = Modifier
                .background(Color.LightGray)
                .verticalScroll(rememberScrollState())
                .padding(32.dp)
        ) {
            Column {
                repeat(6) {
                    Box(
                        modifier = Modifier
                            .height(128.dp)
                            .verticalScroll(rememberScrollState())
                    ) {
                        Text(
                            "Scroll here",
                            modifier = Modifier
                                .border(12.dp, Color.DarkGray)
                                .background(brush = gradient)
                                .padding(24.dp)
                                .height(150.dp)
                        )
                    }
                }
            }
        }
    }

四、滚动嵌套

Compose 支持*嵌套滚动,*其中多个元素对单个滚动手势作出反应。简单的嵌套滚动不需要您执行任何操作。嵌套滚动的典型示例是另一个列表中的列表,更复杂的情况是折叠工具栏。启动滚动操作的手势会自动从子项传播到父项,这样当子项无法进一步滚动时,手势由其父元素处理。

折叠工具栏的代码可以查看

https://developer.android.google.cn/reference/kotlin/androidx/compose/ui/input/nestedscroll/package-summary#(androidx.compose.ui.Modifier).nestedScroll(androidx.compose.ui.input.nestedscroll.NestedScrollConnection,androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher)

以下示例显示verticalScroll在容器中应用了修饰符的元素,该容器也verticalScroll应用了修饰符。

val gradient = Brush.verticalGradient(0f to Color.Gray, 1000f to Color.White)
Box(
    modifier = Modifier
        .background(Color.LightGray)
        .verticalScroll(rememberScrollState())
        .padding(32.dp)
) {
    Column {
        repeat(6) {
            Box(
                modifier = Modifier
                    .height(128.dp)
                    .verticalScroll(rememberScrollState())
            ) {
                Text(
                    "Scroll here",
                    modifier = Modifier
                        .border(12.dp, Color.DarkGray)
                        .background(brush = gradient)
                        .padding(24.dp)
                        .height(150.dp)
                )
            }
        }
    }
}

两个嵌套的垂直滚动 UI 元素,响应内部元素内外的手势

五、使用nestedScroll 修饰符

如果您需要在多个元素之间创建高级协调滚动, nestedScroll 修改器通过定义嵌套滚动层次结构为您提供更大的灵活性。其相关api如下:

fun Modifier.nestedScroll(
    connection: NestedScrollConnection,
    dispatcher: NestedScrollDispatcher? = null
): Modifier

具体代码略微复杂,后面再说这个的具体使用方式,官方教程如下:

https://developer.android.google.cn/reference/kotlin/androidx/compose/ui/input/nestedscroll/package-summary#(androidx.compose.ui.Modifier).nestedScroll(androidx.compose.ui.input.nestedscroll.NestedScrollConnection,androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher)

六、参考链接

  1. compose中的手势

    https://developer.android.google.cn/jetpack/compose/gestures

  2. compose中的nestedScroll

    https://developer.android.google.cn/reference/kotlin/androidx/compose/ui/input/nestedscroll/package-summary#(androidx.compose.ui.Modifier).nestedScroll(androidx.compose.ui.input.nestedscroll.NestedScrollConnection,androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher)

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值