You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose:LazyGrid中无法使用fillMaxHeight/fillParentMaxHeight的问题

解决方案

要让LazyVerticalGrid的子项高度与网格本身高度一致,你需要先获取网格的实际高度,再将该高度应用到子项上。具体步骤如下:

  1. 记录网格高度:使用remember和mutableStateOf存储网格的高度,通过onGloballyPositioned回调获取网格的布局尺寸。
  2. 应用高度到子项:将记录的网格高度设置给子项的Modifier.height(),确保子项高度与网格匹配。

修改后的代码示例:

val gridHeight = remember { mutableStateOf(0.dp) }

LazyVerticalGrid(
    columns = GridCells.Fixed(2),
    modifier = Modifier
        .weight(1f)
        .fillMaxSize()
        .onGloballyPositioned { coordinates ->
            gridHeight.value = coordinates.size.height.toDp()
        },
    content = {
        items(count = 100) {
            val cardColor = Color(
                (0..255).random(),
                (0..255).random(),
                (0..255).random()
            )
            Card(
                modifier = Modifier
                    .padding(4.dp)
                    .height(gridHeight.value)
                    .fillMaxWidth(), // 同时占满列宽
                colors = CardDefaults.cardColors(containerColor = cardColor)
            ) {
                // 可添加子内容,若为空也会保持网格高度
            }
        }
    }
)

关键说明

  • 避免使用fillMaxHeight(3f)这类超过1的比例值:该参数是子项相对于父级的高度比例,超过1会导致子项超出网格范围被隐藏。
  • fillParentMaxHeight不可用的原因:该方法仅在特定布局作用域(如BoxScope)中提供,LazyGridItemScope不支持此方法。
  • 初始高度处理:如果需要避免网格未布局时子项高度为0,可以添加.heightIn(min = 100.dp)作为兜底。

内容的提问来源于stack exchange,提问作者JokerGrAp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 07:14:53