我正在尝试在 android jetpack 中创建一个具有多项选择的下拉菜单。 这是需要创建的 UI,也是代码片段。
Column(
modifier = Modifier
.verticalScroll(rememberScrollState())
.fillMaxHeight()
.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(10.dp),
) {
Surface(
color = Color.White
) {
LazyVerticalGrid(
state = rememberLazyGridState(),
modifier = Modifier.fillMaxSize(),
columns = GridCells.Fixed(2)
) {
itemsIndexed(items = list) { index, item ->
ListItemView_New(text = item, model = list[index], position = index)
}
}
}
}
@Composable
fun ListItemView_New(model: String, position: Int, text: String) {
Box(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.padding(vertical = 6.dp, horizontal = 16.dp)
) {
Checkbox(
checked = false, onCheckedChange = {
},
colors = CheckboxDefaults.colors(
checkedColor = Color.Black,
uncheckedColor = Color.Gray
),
modifier = Modifier
.align(Alignment.CenterStart)
)
Text(
text = text,
fontSize = 18.sp,
color = Color.Gray,
fontWeight = FontWeight.Normal,
modifier = Modifier
.align(Alignment.CenterStart)
.padding(start = 48.dp)
)
}
}
它给出以下错误
垂直可滚动组件的测量具有无限最大高度限制,这是不允许的。常见原因之一是嵌套布局,例如 LazyColumn 和 Column(Modifier.verticalScroll())。如果您想在项目列表之前添加标题,请在 LazyColumn 范围内的主 items() 之前添加一个标题作为单独的 item() 。发生这种情况可能还有其他原因:您的 ComposeView 被添加到具有一定权重的 LinearLayout 中、您应用了 Modifier.wrapContentSize(unbounded = true) 或编写了自定义布局。请尝试消除滚动容器上方层次结构中无限约束的来源。
我认为,它给出了错误:
.verticalScroll(rememberScrollState()) and LazyVerticalGrid
在同一个作品中。
但我无法找到解决方法。有人可以帮忙吗?
通过使
Column
可滚动,您可以允许其子项占用所需的空间,超过当前可用的空间。没关系,因为您可以向下滚动查看其余内容。
但是,您不能将像
LazyVerticalGrid
这样的惰性组件放入如此无限大的容器中。 LazyVerticalGrid
仅显示当前可见的项目。可见的内容由 LazyVerticalGrid
的大小决定。它占用了所有可用空间,但是当放置在无限大的容器中(作为可滚动的列)时,不会有固定的大小。这就是您收到错误的原因。
解决方案很简单:要么通过删除其可滚动修饰符来使容器的大小有限,要么显式将 LazyVerticalGrid
的高度设置为某个有限值。