如何基于文本长度动态调整Row列权重,实现左右文本自适应分配宽度
实现方案
你可以通过BoxWithConstraints配合widthIn限制轻松实现该布局,核心逻辑是先拿到父布局总宽度,限制右侧文本最大宽度为总宽度的40%,左侧文本占满剩余空间,天然满足左侧最小占60%的要求。
示例代码
BoxWithConstraints(modifier = Modifier.fillMaxWidth()) { // 计算右侧文本允许的最大宽度:总宽度的40% val rightMaxWidth = maxWidth * 0.4f Row(modifier = Modifier.fillMaxWidth()) { Text( text = left, modifier = Modifier .padding(8.dp) .weight(1f) // 占满右侧文本之外的所有剩余空间 ) Text( text = right, modifier = Modifier .padding(8.dp) .widthIn(max = rightMaxWidth) // 宽度不超过总宽度的40%,不足时按实际内容宽度显示 ) } }
逻辑说明
- 当右侧文本内容较长时,会被限制在最大40%总宽度,此时左侧自动占满剩余的60%宽度,符合两个文本都较长的场景要求
- 当右侧文本内容较短、实际宽度不足40%总宽度时,右侧仅占用自身内容所需宽度,剩余空间全部归左侧使用,符合右侧较短的场景要求
如果需要控制右侧文本过长时的展示效果,可给右侧Text添加maxLines、overflow等属性自行调整,比如设置单行省略:
Text( text = right, modifier = Modifier .padding(8.dp) .widthIn(max = rightMaxWidth), maxLines = 1, overflow = TextOverflow.Ellipsis )
内容的提问来源于stack exchange,提问作者netimen
相关产品推荐
相关产品推荐

