ArkUI Text:长文别一股脑砸到用户脸上

举报
蓝瘦的蜕变 发表于 2026/08/16 14:47:50 2026/08/16
【摘要】 今天我们把长文本收一收,让页面先给用户一个能扫读的摘要,而不是把整段内容直接铺满屏幕。 这个 Demo 只做一件事:用 maxLines、textOverflow 和 ellipsisMode 控制长文展示,再用一个很小的状态切换“展开 / 收起”。状态这里只是为了让按钮能动起来,我们不在这篇展开讲状态管理。 先做两行

ArkUI Text:长文别一股脑砸到用户脸上

今天我们把长文本收一收,让页面先给用户一个能扫读的摘要,而不是把整段内容直接铺满屏幕。

这个 Demo 只做一件事:用 maxLinestextOverflowellipsisMode 控制长文展示,再用一个很小的状态切换“展开 / 收起”。状态这里只是为了让按钮能动起来,我们不在这篇展开讲状态管理。

先做两行摘要

长文最常见的处理方式,是先限制行数:

Text(this.articleText)
  .maxLines(2)
  .textOverflow({ overflow: TextOverflow.Ellipsis })

maxLines(2) 负责收住高度,TextOverflow.Ellipsis 负责在内容溢出时补省略号。两者要一起看,单独写省略号配置,一般不会得到你想要的效果。

再给用户展开入口

如果内容确实值得继续看,我们给一个按钮:

Text(this.articleText)
  .maxLines(this.expanded ? 20 : 3)
  .textOverflow({ overflow: TextOverflow.Ellipsis })
  .ellipsisMode(EllipsisMode.END)

这里的思路很朴素:没展开时最多 3 行,展开后给一个足够大的行数。ellipsisMode(EllipsisMode.END) 表示省略号放在末尾。一般文章摘要这么做最自然,读者也最容易理解。

你可以自己改两个地方试试:把 maxLines(3) 改成 1,再把 EllipsisMode.END 换成 STARTCENTER。有些模式在单行文本里更明显,多行场景下不要强行追求花样。

如果你做过资讯列表、商品描述或者评论预览,最容易翻车的是哪种长文?下一篇想先看 Symbol、StyledString,还是继续深挖 Text 的细节?

完整代码

@Entry
@Component
struct ArkUITextExpandDemo {
  @State expanded: boolean = false;

  private articleText: string = '很多页面不是内容不好,而是一下子把长文全摊开了。用户只是想先扫一眼重点,结果被整段文字顶满屏幕。我们可以先用 maxLines 收住内容,再用 textOverflow 给出省略提示,需要时再展开。这样页面不拥挤,读者也能自己决定要不要继续看。';

  @Builder
  sectionTitle(title: string) {
    Text(title)
      .width('100%')
      .fontSize(15)
      .fontWeight(700)
      .fontColor('#334155')
  }

  build() {
    Scroll() {
      Column({ space: 18 }) {
        Text('ArkUI Text')
          .width('100%')
          .fontSize(24)
          .fontWeight(700)
          .fontColor('#0F172A')

        Text('长文别一股脑砸到用户脸上')
          .width('100%')
          .fontSize(22)
          .fontWeight(700)
          .fontColor('#111827')

        Text('今天只看长文本怎么收起来。先用两行摘要兜住版面,再给用户一个展开入口。')
          .width('100%')
          .fontSize(14)
          .fontColor('#64748B')
          .lineHeight(22)

        Column({ space: 12 }) {
          this.sectionTitle('两行摘要')

          Text(this.articleText)
            .width('100%')
            .fontSize(15)
            .fontColor('#334155')
            .lineHeight(24)
            .maxLines(2)
            .textOverflow({ overflow: TextOverflow.Ellipsis })

          Text('适合列表摘要、卡片说明和评论预览。')
            .width('100%')
            .fontSize(13)
            .fontColor('#64748B')
        }
        .width('100%')
        .padding(16)
        .backgroundColor('#F8FAFC')
        .borderRadius(8)

        Column({ space: 12 }) {
          this.sectionTitle('展开和收起')

          Text(this.articleText)
            .width('100%')
            .fontSize(15)
            .fontColor('#334155')
            .lineHeight(24)
            .maxLines(this.expanded ? 20 : 3)
            .textOverflow({ overflow: TextOverflow.Ellipsis })
            .ellipsisMode(EllipsisMode.END)

          Button(this.expanded ? '收起内容' : '展开阅读全文')
            .height(36)
            .fontSize(14)
            .fontColor('#2563EB')
            .backgroundColor('#DBEAFE')
            .borderRadius(18)
            .onClick(() => {
              this.expanded = !this.expanded
            })
        }
        .width('100%')
        .padding(16)
        .backgroundColor('#EFF6FF')
        .borderRadius(8)

        Column({ space: 12 }) {
          this.sectionTitle('省略位置')

          Text('ellipsisMode 要和 maxLines、TextOverflow.Ellipsis 一起用。单独写 ellipsisMode,页面不会凭空出现省略号。')
            .width('100%')
            .fontSize(15)
            .fontColor('#475569')
            .lineHeight(24)
            .maxLines(2)
            .textOverflow({ overflow: TextOverflow.Ellipsis })
            .ellipsisMode(EllipsisMode.END)
        }
        .width('100%')
        .padding(16)
        .backgroundColor('#FFF7ED')
        .borderRadius(8)
      }
      .width('100%')
      .padding(20)
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#FFFFFF')
  }
}
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。