Android jetpack 中带有 ConstraintLayout 的 LazyColumn 组合

Pol*_*ion 5 kotlin android-jetpack-compose lazycolumn

我将在每列的顶部放置一个标签,并Lazy\xd0\xa1olumn在底部放置一个标签。如下。

\n

在此输入图像描述

\n

然而,当我填写完后,却出现了与我预想不同的画面:

\n

在此输入图像描述

\n

我还需要设置什么吗?这是我的代码

\n
@Composable\nfun MenuDetailList(\n    loading: Boolean,\n    type: String,\n    items: List<Any>,\n    page: Int,\n    onChangeScrollPosition: (Int) -> Unit,\n    onTriggerNextPage: () -> Unit,\n    onCallCacheDialog: (Int) -> Unit\n) {\n    val configuration = LocalConfiguration.current\n    val screenHeight = configuration.screenHeightDp.dp\n\n    Box(\n        modifier = Modifier\n            .background(color = MaterialTheme.colors.surface)\n    ) {\n        if (loading && items.isEmpty()) {\n            LoadingShimmer(imageHeight = screenHeight)\n        }else if (items.isEmpty()) {\n            NothingHere()\n        }else {\n            ConstraintLayout(\n                modifier = Modifier\n                    .fillMaxSize()\n                    .background(color = Color.White)\n            ) {\n                val (label, list) = createRefs()\n                TopAppBar(\n                    modifier = Modifier\n                        .constrainAs(label) {\n                            top.linkTo(parent.top)\n                            start.linkTo(parent.start)\n                            end.linkTo(parent.end)\n                        }\n                ) {\n                    MenuDetailLabel()\n                }\n                LazyColumn(\n                    modifier = Modifier\n                        .background(color = Color.Blue)\n                ) {\n                    itemsIndexed(\n                        items = items\n                    ) { index, detail ->\n                        onChangeScrollPosition(index)\n                        if ((index + 1) >= (page * PAGE_SIZE) && !loading) {\n                            onTriggerNextPage()\n                        }\n                        when(type) {\n                            "purchase" -> {\n                                PurchaseCard(\n                                    purchase = detail as Purchase,\n                                    onClick = onCallCacheDialog\n                                )\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Moh*_*qer 9

modifier = Modifier.constrainAs(list) {
            top.linkTo(label.bottom)
            start.linkTo(parent.start)
            end.linkTo(parent.end)
            bottom.linkTo(parent.bottom)
width = Dimension.fillToConstraints
height = Dimension.fillToConstraints
}
Run Code Online (Sandbox Code Playgroud)

  • 高度为“Dimension.preferredWrapContent” (5认同)

And*_*Dev 0

您忘记了constrainAsLazyColumn 的:

LazyColumn(
    modifier = Modifier
        .background(color = Color.Blue)
        .constrainAs(list) {
            top.linkTo(label.bottom)
            start.linkTo(parent.start)
            end.linkTo(parent.end)
            bottom.linkTo(parent.bottom)
        }
)
Run Code Online (Sandbox Code Playgroud)