我尝试查找此内容,但找不到任何相关内容。
我想要一个“全尺寸”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
}
}
}
预期结果:两个Box
和 Column
(绿色和红色边框)填满整个屏幕。实际结果:
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/