android - 与 Jetpack Compose 中的 VerticalScroll 结合使用时,fillMaxSize 修饰符不起作用

标签 android kotlin android-jetpack-compose

我尝试查找此内容,但找不到任何相关内容。
我想要一个“全尺寸”Column在可垂直滚动的 Box 内这种组合似乎不起作用。当我添加 verticalScroll(rememberScrollState()) Box 的修饰符,它似乎“禁用”了 fillMaxSize() Column 的修饰符
以下代码执行不是 按预期工作:

MyTheme {
        Box(
            modifier = Modifier
                .fillMaxSize()
                .border(2.dp, Color.Green) //for visual effect only
                .verticalScroll(rememberScrollState())
        ) {
            Column(
                modifier = Modifier
                    .fillMaxSize()
                    .padding(2.dp)
                    .border(2.dp, Color.Red) //for visual effect only
            ) {
               //some content
            }
        }
}
预期结果:两个BoxColumn (绿色和红色边框)填满整个屏幕。
实际结果: Box填满屏幕,但 Column不填充高度

但是,如果我删除 verticalScroll()来自 Box 的修饰符,我得到了预期的结果:
MyTheme {
        Box(
            modifier = Modifier
                .fillMaxSize()
                .border(2.dp, Color.Green) //for visual effect only
                //verticalScroll modifier removed
        ) {
            Column(
                modifier = Modifier
                    .fillMaxSize()
                    .padding(2.dp)
                    .border(2.dp, Color.Red) //for visual effect only
            ) {
               //some content
            }
        }
}

最佳答案

verticalScroll包裹内容的高度,可以拉伸(stretch)到很长,所以范围有Constraints.Infinity对于 maxHeight约束。
来自 fillMaxHeight documentation

If the incoming maximum height is Constraints.Infinity this modifier will have no effect.


这就是为什么你需要设置 height明确地。
考虑切换到 LazyColumn (有 fillParentMaxHeight() 用于此确切目的)或 Pager (这是针对这种情况明确提出的)。
此外,作为@AdrianK 指针,使用常规 scrollable你可以用 BoxWithConstraints 包裹你的 View , 并使用 maxHeight设置height你的看法。
BoxWithConstraints {
    Box(
        modifier = Modifier
            .fillMaxSize()
            .border(2.dp, Color.Green)
            .verticalScroll(rememberScrollState())
    ) {
        Column {
            repeat(2) {
                Column(
                    modifier = Modifier
                        // fillMaxWidth instead of fillMaxSize
                        .fillMaxWidth()
                        // explicit height modifier
                        .height(this@BoxWithConstraints.maxHeight)
                        .padding(2.dp)
                        .border(2.dp, Color.Red)
                ) {
                    //some content
                }
            }
        }
    }
}
结果:

关于android - 与 Jetpack Compose 中的 VerticalScroll 结合使用时,fillMaxSize 修饰符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69394543/

相关文章:

android - build.gradle文件中是否可能 “def”值

android - 增加启动画面中位图图像的大小

java - 如何删除致命异常 : AsyncTask in android

kotlin - Kotlin将顺序IO调用包装为Sequence

android - 是否可以使 LazyRow/LazyColumn 在屏幕上显示一定数量的项目,而无需传入显式 DP 宽度

Android Material 设计按钮 - Pre lollipop

hibernate - 我可以在 hibernate 实体中使用ClosedRange <T>吗?

android - Jetpack Compose 和 Room DB : Performance overhead of auto-saving user input?

android - 为什么我收到后端内部错误 : "Exception during IR lowering error" when using Jetpack Compose clickable-Modifier?

android - Jetpack Compose - 如果具有嵌套导航,则不会选择底部导航图标