Jetpack Compose:LazyGrid中无法使用fillMaxHeight/fillParentMaxHeight的问题
解决方案
要让LazyVerticalGrid的子项高度与网格本身高度一致,你需要先获取网格的实际高度,再将该高度应用到子项上。具体步骤如下:
- 记录网格高度:使用
remember和mutableStateOf存储网格的高度,通过onGloballyPositioned回调获取网格的布局尺寸。 - 应用高度到子项:将记录的网格高度设置给子项的
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
相关产品推荐
相关产品推荐

