使用jetpack compose下拉菜单中的LazyVerticalGrid

问题描述 投票:0回答:1

我正在尝试在 android jetpack 中创建一个具有多项选择的下拉菜单。 这是需要创建的 UI,也是代码片段。

UI - Dropdown

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
在同一个作品中。

但我无法找到解决方法。有人可以帮忙吗?

android android-jetpack-compose android-jetpack android-jetpack-compose-material3 jetpack
1个回答
0
投票

通过使

Column
可滚动,您可以允许其子项占用所需的空间,超过当前可用的空间。没关系,因为您可以向下滚动查看其余内容。

但是,您不能将像

LazyVerticalGrid
这样的惰性组件放入如此无限大的容器中。
LazyVerticalGrid
仅显示当前可见的项目。可见的内容由
LazyVerticalGrid
的大小决定。它占用了所有可用空间,但是当放置在无限大的容器中(作为可滚动的列)时,不会有固定的大小。这就是您收到错误的原因。 解决方案很简单:要么通过删除其可滚动修饰符来使容器的大小有限,要么显式将

LazyVerticalGrid

的高度设置为某个有限值。

    

© www.soinside.com 2019 - 2024. All rights reserved.