Jetpack Compose Column 中的 fillViewPort 行为

ngl*_*ber 5 android android-jetpack-compose

ScrollView fillViewPortJetpack Compose 中是否有类似的东西Column

看这个例子:

@Composable
fun FillViewPortIssue() {
    Column(
        Modifier
            .fillMaxSize()
            .padding(16.dp)
    ) {
        for (i in 0..5) {
            Box(
                modifier = Modifier
                    .padding(vertical = 8.dp)
                    .background(Color.Red)
                    .fillMaxWidth()
                    .height(72.dp)
            )
        }
        Spacer(modifier = Modifier.weight(1f))
        Button(
            modifier = Modifier.fillMaxWidth(),
            onClick = { /*TODO*/ }
        ) {
            Text("Ok")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是结果:

在此处输入图片说明

当设备处于横向时,内容被裁剪,因为没有滚动。如果我添加verticalScroll修饰符,请执行Column...

    ...
    Column(
        Modifier
            .verticalScroll(rememberScrollState()) // <<-- this
            .fillMaxSize()
            .padding(16.dp)
    ) {
    ...
Run Code Online (Sandbox Code Playgroud)

...滚动问题已修复,但按钮上升,就像这样。

在此处输入图片说明

在传统的工具包中,我们可以使用ScrollView+fillViewPort属性来解决这个问题。有什么等同于 Compose 的东西吗?

ngl*_*ber 11

只需更改起作用的修改器的顺序...感谢 Abhishek Dewan(来自 Kotlin Slack 频道)!

Column(
    Modifier
        .fillMaxSize() // first, set the max size
        .verticalScroll(rememberScrollState()) // then set the scroll
) {
Run Code Online (Sandbox Code Playgroud)


alf*_*tap 7

我最近遇到了类似的问题,并替换了verticalScrollscrollable(rememberScrollState(), Orientation.Vertical)似乎适合我的情况,并允许屏幕填充其视口,同时允许滚动