ArkTS 图文混排(Text & Image Layout)详解

ArkTS 图文混排(Text & Image Layout)详解

鸿蒙第四期开发者活动

图文混排 是指在页面布局中让文本紧密结合图像展示,可以是“文字环绕图片”、“文本在图片周围排列”、“图标跟文字组合”等。这个机制不像单纯放一个 Text 或一个 Image 那么简单,它是把图文组合成更富表现力的 UI。官方文档明确指出图文混排就是图片与文字混合排列,以增强视觉信息表达。华为开发者


一、什么是图文混排?为什么要学

在日常 App UI 开发里,图文混排非常常见,比如:

  • 商品详情页里:大图 + 下面配文字
  • 新闻/文章里:正文嵌入插图 + 文字解释
  • 卡片组件:图标 + 标题 + 副标题组合
  • 标签/徽章结合文字说明

图文混排的核心目的是 把图片和文字有机组合在一个布局里,既能描述信息,又增强视觉表现力。它比单纯的 TextImage 更灵活,同时也比手动用 Row/Column 单独拼接更语义清晰。华为开发者


二、常见图文混排结构有哪些

结构类型 用途示例 实现方式
文本环绕小图标 图标 + 文案 Row + Text / Text + Span + ImageSpan
文本上方大图 头图 + 说明文 组合 Column
图片旁边文本 商品缩略图 + 介绍 Row
图内嵌入文本 图像背景上的标题 Stack
图文混合段落 图 + 多段文本 嵌套布局组合

三、基本组件回顾(图 + 文)

图文布局通常用到两个核心组件:

1) Image

用于展示图片,可以是本地资源或网络资源:

Image($r('app.media.mate60'))
  .width(120)
  .height(80)
  .borderRadius(8)

Image 的关键点:

  • 常见在卡片、列表或缩略图使用
  • 可配背景圆角、裁剪、缩放模式等
  • 若要从网络加载,需要在 module.json5 配置网络权限 ohos.permission.INTERNET(针对网络图片)CSDN

2) Text

用于展示文字内容,可以控制对齐、颜色、大小、最大行数等属性:

Text('商品标题')
  .fontSize(15)
  .fontColor(0xFF000000)
  .maxLines(2)
  .textOverflow({ overflow: TextOverflow.Ellipsis })

Text 和 Image 的组合是图文混排的基础。CSDN


四、最基础的图文混排写法(像人写的那种)

下面给你几种最常见、能直接用在项目里的图文混排写法,从简单到复杂逐步示范:


1. 图片 + 文字(上图下文)

最常见的商品详情/文章示例:

Column({ space: 8 }) {
  Image($r('app.media.sample_pic'))
    .width('100%')
    .height(180)
    .borderRadius(12)

  Text('这里是图片下的描述性文字,可能很长,需要自动换行')
    .fontSize(14)
    .fontColor(0xFF333333)
}
.padding(12)

这种结构清晰、可维护,适合内容展示页、商品详情等。


2. 图左文右(列表项典型写法)

用于商品列表、联系人列表等:

Row({ space: 10, alignItems: ItemAlign.Center }) {
  Image($r('app.media.avatar'))
    .width(60)
    .height(60)
    .borderRadius(8)

  Column({ space: 4 }) {
    Text('标题文本')
      .fontSize(16)
      .fontWeight(FontWeight.Medium)

    Text('副标题/说明,最多两行')
      .fontSize(13)
      .fontColor(0xFF666666)
      .maxLines(2)
      .textOverflow({overflow: TextOverflow.Ellipsis})
  }
}
.padding({ left: 12, right: 12 })

要点:

  • Row 保证图片和文字横向排列
  • alignItems: ItemAlign.Center 让图片/文字垂直居中
  • 给文字设置最大行数和截断策略CSDN

3. 图片背景上的文字(图文叠加)

有时候设计稿会要求文字覆盖在图上,这时可以用 Stack

Stack({ alignContent: Alignment.BottomStart }) {
  Image($r('app.media.banner'))
    .width('100%')
    .height(180)
    .borderRadius(12)

  Text('叠加在图片底部的标题')
    .fontSize(18)
    .fontColor(0xFFFFFFFF)
    .padding(12)
}

这是典型的图上文字效果,适合焦点图、轮播页卡片等场景。


五、进阶图文混排策略

在一些复杂场景里,你可能需要做到:


图文环绕布局

理论上 ArkTS 不直接提供 Text 自动围绕图片的 API(比如 CSS 的 float),但你可以用组合布局达到“视觉上文字围绕图”的效果:

Row({ space: 8 }) {
  Column({ width: '30%' }) {
    Image($r('app.media.side_pic')).width('100%').height(120)
  }
  Column({ width: '70%' }) {
    Text('这是一段很长的文字内容,它会填满剩余宽度的列...')
    Text('第二段继续说明性文字...')
  }
}

这种方式是左右分栏模拟图文环绕,实际在列表/详情页里很常见。


图标 + 文本混排(小图标在文字中)

如果要在一段文字里嵌入一个小图标,例如 热门商品 形式:

Row({ space: 6, alignItems: ItemAlign.Center }) {
  Image($r('app.media.icon_star'))
    .width(14).height(14)

  Text('热门推荐')
    .fontSize(14)
    .fontColor(0xFFFF3B30)
}

这种图文混排比单纯靠字符 Emoji 更规范、易控制,也利于不同屏幕尺寸自适应。


六、图文混排常见问题(开发者角度)


问题 1 — 图片尺寸乱了

常见原因: Image 没指定 width/height 或者没设比例
解决方式:明确指定固定尺寸或 aspectRatio 约束比例


问题 2 — 文字没有自动换行

在默认情况下 Text 会自动换行,但当你把 Text 放在一个确定宽度的容器里时(比如 Row 内 Column),换行才会按你预期发生;如果宽度不够明确,可能看起来像不换行。
解决方式:明确容器宽度/权重约束


问题 3 — 图像加载延迟导致布局跳动

尤其是网络图片,在未加载完成前布局可能“先撑开后收缩”。
解决方式:

  • 先设置 width/height(固定占位),
  • 或用骨架屏/占位图避免闪动

七、什么时候用图文混排

场景 推荐模式
文章正文 图上文字 + 下方段落
资讯列表 左图右文
焦点图卡片 图片背景文字
标签 + 提示 小图标内联

八、小结(像真实开发者写的重点总结)

  • 图文混排是 UI 常见但不简单的布局问题,目的是让图和文在视觉上协调、美观地展现内容。华为开发者
  • 最常用的实现方式就是组合 Row, Column, Stack + Text + Image
  • 关键在于 布局策略(横向/纵向/叠加)和 尺寸控制(确保图片/文字空间比例合理)。
  • 不同场景的布局有不同的侧重点:
    卡片列表 → 图左文右
    全屏海报 → 图上文字
    段落细节 → 图文分栏
posted @ 2025-12-22 08:54  想喝冰咖啡  阅读(1)  评论(0)    收藏  举报