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

Jetpack Compose中widthIn与weight结合的宽度限制问题

问题原因

你当前代码里的weight(0.5f)优先级高于widthIn,它会强制两个组件平分Row的全部可用宽度,不管你设置的宽度上限,所以组件会被拉伸到超过150dp(或你想要的120dp)。

解决方案

去掉weight(0.5f),改用fillMaxWidth(0.5f)结合widthIn(max = 120.dp),或者设置weight(0.5f, fill = false),两种方式都能实现“可用空间≤120dp时填充全部,超过则限制在120dp”的效果:

方式一:使用fillMaxWidth + widthIn

Row(Modifier.fillMaxWidth()) {
    Text(
        text = "内容",
        modifier = Modifier
            .height(100.dp)
            .widthIn(max = 120.dp) // 对应你要的最大宽度
            .fillMaxWidth(0.5f)
            .background(Color.LightGray) // 仅用于可视化效果,可移除
    )
    Text(
        text = "内容",
        modifier = Modifier
            .height(100.dp)
            .widthIn(max = 120.dp)
            .fillMaxWidth(0.5f)
            .background(Color.LightGray)
    )
}

方式二:使用weight(fill = false) + widthIn

Row(Modifier.fillMaxWidth()) {
    Text(
        text = "内容",
        modifier = Modifier
            .height(100.dp)
            .widthIn(max = 120.dp)
            .weight(0.5f, fill = false) // fill设为false,避免强制拉伸
            .background(Color.LightGray)
    )
    Text(
        text = "内容",
        modifier = Modifier
            .height(100.dp)
            .widthIn(max = 120.dp)
            .weight(0.5f, fill = false)
            .background(Color.LightGray)
    )
}
说明
  • 注意你描述里的目标最大宽度是120dp,但原代码写的是150dp,修改时要统一调整数值。
  • 两种方式的区别:方式一在Row宽度超过240dp时,两个组件各占120dp,剩余空间会留在Row两侧;方式二的剩余空间会被Row内的空白区域填充,组件仍保持平分权重的布局位置(居中分布)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:08:28