Jetpack Compose中Row内指定文本空间不足省略且不撑满整行
实现效果说明
当前需要实现的文本布局规则:
- 外层Row宽度自适应内容,仅占用内容展示所需的最小空间,不会强制占满整行
- 水平空间充足时,两个文本全部完整展示
- 水平空间不足时,仅第一个文本触发末尾省略效果,第二个文本始终完整显示、不被截断
直接给第一个Text添加默认参数的weight(1f)会导致Row撑满整行,不符合自适应要求。
核心实现代码
Row( modifier = Modifier.background(Color.Red) ) { Text( text = ELLIPSIZE_THIS_TEXT, maxLines = 1, overflow = TextOverflow.Ellipsis, // 核心配置:设置权重且关闭fill强制填充 modifier = Modifier.weight(1f, fill = false) ) Text( text = LEAVE_THIS_TEXT_NOT_ELLIPSIZED, maxLines = 1, overflow = TextOverflow.Visible ) }
实现原理
- Compose中
weight修饰符的第二个参数fill默认值为true,此时带weight的元素会强制占满父布局分配的所有剩余空间,最终导致Row撑满整行宽度。 - 将
fill设置为false后,弹性布局规则仅在空间不足时生效:当两个文本总宽度超过可用水平空间时,带weight的第一个文本会被压缩到剩余可用宽度,触发省略效果;第二个无weight的文本不会被压缩,始终完整展示。 - 当水平空间充足时,带weight的第一个文本不会强制占满剩余空间,会按自身内容实际宽度布局,Row整体宽度等于两个文本实际宽度之和,实现宽度自适应内容的效果。
内容的提问来源于stack exchange,提问作者Andrew Kolubov
相关产品推荐
相关产品推荐

