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

在LazyColumn中使用LazyHorizontalGrid导致应用崩溃求助

问题原因与解决方案

核心原因

LazyHorizontalGrid 要求父容器提供明确的垂直高度约束——因为它是基于固定行数(你这里是2行)的网格布局,需要确定自身的垂直尺寸范围。但 LazyColumn 作为垂直可滚动容器,默认给子组件的垂直约束是 wrap_content(无明确上限),这就导致 LazyHorizontalGrid 无法计算自身高度,触发 IllegalArgumentException。

而 LazyRow 之所以没问题,是因为它的主轴是水平方向,垂直方向只需要包裹子项的高度,不需要父容器提供明确的垂直约束,LazyColumn 的默认约束完全能满足它的需求。

解决方法

1. 直接设置固定高度

给 LazyHorizontalGrid 添加固定高度修饰符,明确垂直方向的尺寸:

LazyColumn {
    item {
        LazyHorizontalGrid(
            rows = GridCells.Fixed(2),
            modifier = Modifier.height(200.dp), // 固定高度
            content = {
                items(12) { index ->
                    Text(
                        "Grid Item $index",
                        modifier = Modifier
                            .padding(8.dp)
                            .background(Color.LightGray)
                            .padding(16.dp)
                    )
                }
            }
        )
    }
}

2. 利用固有尺寸自适应高度

如果不想写死高度,想让 LazyHorizontalGrid 根据2行内容自动适配高度,可以通过固有尺寸修饰符实现:

LazyColumn {
    item {
        // 外层Box用固有尺寸约束高度
        Box(modifier = Modifier.wrapContentHeight(IntrinsicSize.Min)) {
            LazyHorizontalGrid(
                rows = GridCells.Fixed(2),
                modifier = Modifier.fillMaxHeight(), // 填充Box的高度
                content = {
                    items(12) { index ->
                        Text(
                            "Grid Item $index",
                            modifier = Modifier
                                .padding(8.dp)
                                .background(Color.LightGray)
                                .padding(16.dp)
                        )
                    }
                }
            )
        }
    }
}

这种方式会让 LazyHorizontalGrid 基于2行内容的最大高度确定自身尺寸,同时满足 LazyColumn 的布局要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:10:21