ArkTS Text 文本组件详细指南

53 阅读4分钟

ArkTS Text 文本组件详细指南

鸿蒙第四期开发者活动

在任何界面里,最常见、最基础的组件就是 文本(Text) 。它看起来简单,但掌握好它的属性、样式、换行、截断等行为,会让你的页面更规范、显示更稳定。


一、Text 是什么?

在 HarmonyOS ArkTS 的声明式 UI 框架里,Text 是一个基础组件,用于在界面上显示一段文本内容。它不是简单的字符串,而是一个可以被样式化、布局控制、事件绑定的 UI 组件。维基百科

在 ArkUI 里和 Row、Column、Image 一样,Text 是最基本的可渲染组件之一。

 Text('Hello World')
   .fontSize(18)
   .fontColor(Color.Black)

二、为什么 Text 很重要?

你做任何 UI 页面,文本几乎无处不在:

  • 标题
  • 副标题
  • 按钮标签
  • 错误提示
  • 价格、计数、时间
  • 富文本段落

因此理解 Text 的属性与表现,是构建优雅 UI 的起点。


三、Text 的常用属性(逐条解释)

下面每个属性我都配了“为什么要用”和“常见写法”。

1. .fontSize(size)

设置字体大小(统一单位 vp 或数字)。

小标题、正文、细节文字常用不同尺寸规范。

 Text('标题')
   .fontSize(20)
 ​
 Text('正文')
   .fontSize(14)

2. .fontColor(color)

控制文本颜色,大多数时候用设计稿给定的色值。

 Text('错误提示')
   .fontColor(0xFFFF3B30)  // red 错误色

3. .fontWeight(weight)

控制字体粗细,对比更明显、更易读。

 Text('加粗标题')
   .fontWeight(FontWeight.Bold)

4. .maxLines(n) 和 .textOverflow(...)

当文本可能很长时,你可以控制:

  • 最多显示几行
  • 超过行数时如何显示(省略号/截断)
 Text('很长的描述内容...')
   .maxLines(2)
   .textOverflow({ overflow: TextOverflow.Ellipsis })

这在卡片标题、段落摘要场景里非常常见。


5. .textAlign(...)

控制水平对齐方式,常见的值有:

  • TextAlign.Start(靠左)
  • TextAlign.Center(居中)
  • TextAlign.End(靠右)
 Text('居中标题')
   .textAlign(TextAlign.Center)

6. 字体系列、装饰等(可选)

根据设计需求,你可能会用到:

  • fontStyle(斜体)
  • textDecoration(下划线/删除线)

这些属性在视觉类界面、强调文字效果中非常有用。


四、Text 在布局里的行为

ArkTS UI 是一个声明式组件体系,Text 会根据父容器的布局规则参与排布,比如:

Row 里:

 Row({ space: 10 }) {
   Text('左侧')
   Text('右侧')
 }

Column 里:

 Column({ space: 6 }) {
   Text('第一行')
   Text('第二行')
 }

无论是 Row/Column/Flex/Stack,Text 都像一个“可布局的元素”去占用空间、对齐、伸缩。


五、常见细节问题与解决

下面是我在开发中最常遇到、也最容易犯的小错误:


问题 1 — 字太长遮挡别的组件

如果你没有设置 maxLines,长文本会占用太多空间,导致布局跑掉。

解决办法:

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

问题 2 — 文本内容换行不对

默认情况下,Text 会按单词/字符换行,但有时你希望更精确的行为:

  • 使用 textAlign
  • 或者放在 Flex/Column 里配合布局权重

问题 3 — 颜色适配暗色模式

在有“亮/暗模式”的界面里,文本颜色不要写固定黑色,而应该用主题色或变量。


六、进阶写法(项目里真用得上的)

1. 富文本组合(图标与文字在一行)

有时一行里既有图标又有文本,你不会用一个 Text 就搞定,这时配合 Row/Stack 可以写得很干净:

 Row({ space: 6 }) {
   Image($r('icon_info'))
     .width(18).height(18)
   Text('提示信息')
     .fontSize(14)
 }

2. 状态动态文本

当文本内容和状态关联时,用状态变量驱动文本自动刷新:

 @State private count: number = 0
 ​
 Text(`已选 ${this.count} 项`)

3. 多语言文本

在项目里要支持国际化,多数情况下你会用资源引用,而不是硬编码:

 Text($r('strings.hello'))

七、实战示例:一个典型卡片标题与摘要

这个结构在商品页/推荐页/文章页里极常见:

 Column({ space: 4 }) {
   Text('这是一个非常长的标题,可能会换行')
     .fontSize(16)
     .fontWeight(FontWeight.Medium)
     .maxLines(2)
     .textOverflow({ overflow: TextOverflow.Ellipsis })
 ​
   Text('这是摘要/副标题,较小号字体')
     .fontSize(13)
     .fontColor(0xFF666666)

这种写法能保证:

  • 主标题最多两行
  • 摘要始终一行

在布局里弹性好、对齐规范。


八、总结与建议(项目里必读)

不管界面多复杂,Text 都是基础 ✔ 控制行数 / 超出方式 是最重要的两个属性 ✔ 结合布局(Row/Column/Flex) 使用能写出优雅结构 ✔ 别直接写硬编码颜色/大小,用设计规范或主题更易维护