当子列生成更多可组合项时,Android Jetpack Compose Row 的高度 (IntrinsicSize.Min) 不会拉伸

Dan*_* Li 6 android-jetpack-compose

以下是我的代码片段。我传入 editClick,将数据类对象添加到 chargeViewModel.contractSelfPay 中,该对象被观察为 itemList 状态。当我单击该图标时,我可以告诉 itemList 状态通过具有更多均匀间隔的编辑图标来接收更新。但是,BasicGrid Row 的高度不会使用 Intrinsic.Min进行拉伸。

\n

如果我删除 IntrinsicSize.Min,即使行的高度被拉伸,分隔线也不再可以填充MaxHeight 以及图标列。无内在最小

\n
@Composable\nfun ContractSelfPay(chargingViewModel: ChargingViewModel, editClick: () -> Unit = {}) {\n\n    val itemList by chargingViewModel.contractSelfPay.observeAsState()\n\n    val composeList: List<@Composable () -> Unit> = itemList?.map {\n        @Composable {\n            Row {\n                TempFunc { StyledText(text = it.itemTitle) }\n                TempFunc { StyledText(text = it.originalPrice.toString()) }\n                TempFunc { StyledText(text = it.selfPay.toString(), color = self_pay_blue) }\n                TempFunc { StyledText(text = it.count.toString()) }\n                TempFunc { StyledText(text = (it.selfPay * it.count).toString()) }\n            }\n        }\n    } ?: listOf()\n\n    val total = itemList?.map { (it.selfPay.toInt() * it.count.toInt()) }?.sum() ?: 0\n\n    BasicGrid("\xe5\x85\xa8\xe8\x87\xaa\xe8\xb2\xbb", composeList, total = total.toString(), editClick = editClick)\n}\n\n@Composable\nfun BasicGrid(\n    gridTitle: String,\n    itemList: List<@Composable () -> Unit>,\n    total: String = "0",\n    editClick: () -> Unit = {}\n) {\n    Row(modifier = Modifier.height(IntrinsicSize.Min), verticalAlignment = Alignment.CenterVertically) {\n\n        StyledTextBold(text = gridTitle, modifier = Modifier.weight(15f).wrapContentWidth())\n        VerticalDivider()\n\n        Column(\n            modifier = Modifier.weight(60f)\n        ) {\n            itemList.forEachIndexed { index, compose ->\n                compose()\n\n                if (index != itemList.size - 1)\n                    HorizontalDivider()\n            }\n\n            if (itemList.isEmpty())\n                StyledText(text = "\xe5\xb0\x9a\xe6\x9c\xaa\xe6\x9c\x89\xe4\xbb\xbb\xe4\xbd\x95\xe7\xb4\x80\xe9\x8c\x84", modifier = Modifier.weight(1f).wrapContentSize())\n        }\n\n\n        VerticalDivider()\n        StyledTextBold(text = total, modifier = Modifier.weight(15f).wrapContentWidth())\n        VerticalDivider()\n\n        Column(\n            modifier = Modifier\n                .weight(10f)\n                .fillMaxHeight(),\n            verticalArrangement = Arrangement.SpaceEvenly\n        ) {\n            itemList.forEachIndexed { index, detail ->\n                Image(\n                    painter = painterResource(R.drawable.icon_mode_edit),\n                    contentDescription = "",\n                    modifier = Modifier\n                        .align(Alignment.CenterHorizontally)\n                        .clickable { editClick() },\n                )\n\n                if (itemList.isNotEmpty() && index != itemList.size - 1)\n                    HorizontalDivider()\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Maj*_*eee 2

我在这里创建了问题https://issuetracker.google.com/issues/217910352。希望它能得到解决。

我能想到的解决方法之一是跟踪高度并删除 IntrinsicSize.Min。

如:

// _key_ is something that causes change of the height of the row
var height by remember(_key_) { mutableStateOf(0) } 

Row(Modifier.onSizeChanged { height = it.height }) {
   VerticalDivider(Modifier.height(height))
}
Run Code Online (Sandbox Code Playgroud)

在你的情况下,我想关键是 itemList 的大小。