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

Jetpack Compose中Text组件未换行反而被截断,原因是什么?

解决方案

问题核心是Text组件缺少明确的右侧约束,导致fillToConstraints无法限制文本宽度,进而maxLines和自动换行不生效。之前关联父布局end出现重叠,是因为没有确保文本的左右边界被正确限定在图片右侧与父布局右侧之间。

做如下修改即可解决:

  1. 给标题和作者的Text组件添加右侧约束,明确文本的右边界为父布局的右侧(带margin),让文本在固定宽度范围内自动换行。
  2. 保留AsyncImage的固定宽度设置,避免图片挤压文本区域。

修改后的完整代码:

ConstraintLayout(
    modifier = Modifier
        .fillMaxWidth()
        .background(backgroundColor)
        .padding(4.dp)
) {
    val (image, titleConst, authorConst) = createRefs()
    AsyncImage(
        model = book.bookImage, modifier = Modifier
            .constrainAs(image) {
                top.linkTo(parent.top)
                start.linkTo(parent.start)
                bottom.linkTo(parent.bottom)
            }
            .width(imageWidth.dp)
            .height(height.dp),
        contentDescription = stringResource(id = R.string.book_cover)
    )

    Text(
        modifier = Modifier.constrainAs(titleConst) {
            top.linkTo(parent.top, margin = 8.dp)
            start.linkTo(image.end, margin = 8.dp)
            end.linkTo(parent.end, margin = 8.dp) // 添加右侧约束
            width = Dimension.fillToConstraints
        },
        text = title,
        fontSize = 20.sp,
        color = textColor,
        maxLines = 3,
        overflow = TextOverflow.Ellipsis
    )
    Text(
        modifier = Modifier.constrainAs(authorConst) {
            top.linkTo(titleConst.bottom, margin = 4.dp)
            start.linkTo(titleConst.start, margin = 0.dp)
            end.linkTo(parent.end, margin = 8.dp) // 添加右侧约束
            width = Dimension.fillToConstraints
        },
        text = author,
        fontSize = 16.sp,
        color = textColor,
        maxLines = 3,
        overflow = TextOverflow.Ellipsis
    )
}

你之前创建的imageEnd屏障未实际使用,可直接删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:31:17