android jetpack compose 中带有 ConstraintLayout 的 LazyColumn

Posted

技术标签:

【中文标题】android jetpack compose 中带有 ConstraintLayout 的 LazyColumn【英文标题】:LazyColumn with ConstraintLayout in android jetpack compose 【发布时间】:2021-12-28 22:43:37 【问题描述】:

我将在每列的顶部放置一个标签,在底部放置一个LazyСolumn。如下。

但是,当我填写的时候,却出现了意想不到的画面:

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

@Composable
fun MenuDetailList(
    loading: Boolean,
    type: String,
    items: List<Any>,
    page: Int,
    onChangeScrollPosition: (Int) -> Unit,
    onTriggerNextPage: () -> Unit,
    onCallCacheDialog: (Int) -> Unit
) 
    val configuration = LocalConfiguration.current
    val screenHeight = configuration.screenHeightDp.dp

    Box(
        modifier = Modifier
            .background(color = MaterialTheme.colors.surface)
    ) 
        if (loading && items.isEmpty()) 
            LoadingShimmer(imageHeight = screenHeight)
        else if (items.isEmpty()) 
            NothingHere()
        else 
            ConstraintLayout(
                modifier = Modifier
                    .fillMaxSize()
                    .background(color = Color.White)
            ) 
                val (label, list) = createRefs()
                TopAppBar(
                    modifier = Modifier
                        .constrainAs(label) 
                            top.linkTo(parent.top)
                            start.linkTo(parent.start)
                            end.linkTo(parent.end)
                        
                ) 
                    MenuDetailLabel()
                
                LazyColumn(
                    modifier = Modifier
                        .background(color = Color.Blue)
                ) 
                    itemsIndexed(
                        items = items
                    )  index, detail ->
                        onChangeScrollPosition(index)
                        if ((index + 1) >= (page * PAGE_SIZE) && !loading) 
                            onTriggerNextPage()
                        
                        when(type) 
                            "purchase" -> 
                                PurchaseCard(
                                    purchase = detail as Purchase,
                                    onClick = onCallCacheDialog
                                )
                            
                        
                    
                
            
        
    

【问题讨论】:

ConstraintLayout 在这里是多余的。只需使用Column,并将weight(1f) 修饰符添加到LazyColumn @PhilipDukhov 谢谢,我只是使用约束布局,它使屏幕成为我所需要的 【参考方案1】:

您忘记了 LazyColumn 的 constrainAs

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)
        
)

【讨论】:

感谢您的回答,但它无法解决我的问题。惰性列填满整个屏幕 好吧,您错过了 constrainAs 并添加它并没有帮助的事实表明您还有更多问题。您应该发布一个显示所有内容的小型演示应用程序。

以上是关于android jetpack compose 中带有 ConstraintLayout 的 LazyColumn的主要内容,如果未能解决你的问题,请参考以下文章

Android Jetpack Compose学习—— Jetpack compose基础布局

Android Jetpack Compose学习—— Jetpack compose入门

Android Jetpack Compose学习—— Jetpack compose入门

Jetpack Compose 和 Compose Navigation 如何处理 Android 活动?

Android:Activity 中的 Jetpack Compose 和 XML

Android高级Jetpack架构组件+Jetpack compose强化实战