📝 HarmonyOS ArkTS 富文本编辑组件(RichEditor)详解

HarmonyOS ArkTS 富文本编辑组件(RichEditor)详解

鸿蒙第四期开发者活动

富文本编辑器是指支持图文混排、可交互式编辑的文本输入区域,它不仅能够像普通输入框那样输入字符,还能支持样式设置、插入图片/表情等高级操作,是编写富文本内容(例如长评论、文章发布、邮件正文、帖子编辑)时的重要组件。华为开发者


一、什么是 RichEditor?

RichEditor 是 HarmonyOS ArkTS 提供的一种专用富文本编辑组件,它:

  • 支持图文混排(文字 + 图片 + 风格样式)
  • 允许用户对输入内容进行交互式编辑
  • 提供事件监听和内容管理能力

它比 TextInput 更强:不仅仅是输入纯文本,更像是一个可视化的内容编辑区域,用于创建结构化/格式化内容。华为开发者


二、RichEditor 适合的典型场景

场景 说明
发布帖子/文章 用户输入带格式的内容(粗体、列表等)
多媒体评论 允许用户在评论里插入图片/表情
邮件/富文本消息 需要文本加样式、段落格式
内容编辑器 管理更丰富的排版和文本结构

TextInput(只能输入“纯文本”)对比,RichEditor 适合可视化富文本场景


三、核心要素组成

1. RichEditor 组件

这是主控的 UI 区域,你可以直接渲染在页面里:

RichEditor(this.options)

其中 this.options 是一个配置对象(官方文档称为 RichEditorOptions),用于提供控制器等信息来初始化组件。Atbigapp


2. RichEditorController

它是你操作富文本编辑器内容的“引擎”。常用于:

  • 插入文本或图像
  • 控制光标位置
  • 获取当前富文本内容
  • 动态修改内容样式
controller: RichEditorController = new RichEditorController();
options: RichEditorOptions = { controller: this.controller };

在创建 RichEditor 时,把它传给编辑器实例,后续通过它来操控编辑器。DEV Community


四、基础使用示例(一步步写起来)

下面是一个完整的“可运行版”结构示例,展示如何在 ArkTS 页面里渲染并使用 RichEditor:

@Component
struct RichEditorDemo {
  controller: RichEditorController = new RichEditorController();
  options = { controller: this.controller };

  build() {
    Column({ space: 12 }) {
      Text('富文本编辑器示例').fontSize(18).fontWeight(FontWeight.Bold);

      RichEditor(this.options)
        .width('100%')
        .height(280)
        .backgroundColor(0xFFFFFFFF)
        .onReady(() => {
          // 编辑器准备好后可以插入初始内容
          this.controller.addTextSpan('欢迎使用富文本编辑器!')
        })
        .onCopy((evt) => {
          // 用户复制事件
          promptAction.showToast({ message: '内容已复制', duration: 1200 })
        });
    }
    .padding(12)
  }
}

功能细节:

  • .onReady(...):编辑器初始化完毕回调
  • .onCopy(...):用户执行文字复制时触发回调
  • controller.addTextSpan(...):在打开编辑器后动态追加内容(例如引导文本)DEV Community

五、常见 API 与用法

下面是开发过程中你最有可能用到的一些能力:


1. 初始化编辑器内容

当页面加载时,你可以在 onReady 回调里通过 controller 设置初始文本、默认样式等:

.onReady(() => {
  this.controller.addTextSpan('初始内容');
})

这比把字符串直接塞进属性更灵活,因为它是在编辑器渲染后执行。DEV Community


2. 事件监听

富文本编辑器通常有不少事件可以监听,例如:

  • onReady:编辑器初始化完成
  • onCopy:用户复制选中内容
  • onTextChange(如果支持):文本内容变化时触发

上面例子里我们监听了 onCopy 并弹出提示,这在“用户选中文字做动作”场景特有。DEV Community


3. 插入图像 / 图片

RichEditor 一般支持插入富文本图像。
在一些社区文章和示例里可以看到这类能力(插入图片、图标等元素的位置及样式需要通过 Controller 提供的接口操作)。CSDN

示例思路(伪代码):

this.controller.insertImage('https://example.com/img.jpg', { width: 200, height: 120 });

上面代码在光标位置插入图片(具体 API 名称/参数请从官方 API 参考查阅对应字段)。


4. 加样式(粗体/斜体)

通过 Controller 或 Option/Dom 操作,可以为特定段落应用样式,如粗体、斜体、链接等。这类样式操作通常结合 Span 风格控制(某些社区资源提到 Span 在富文本里同样能串联使用)。掘金


六、实战常见技巧与构建思路

1) 插入初始提示语

在富文本评论/编辑器页面里,加入“请输入内容…”的启动提示通常比不写更友好:

.onReady(() => this.controller.addTextSpan('在这里输入你的内容...'));

2) 结合按钮触发样式

在 UI 上放几个按钮,比如“粗体 / 插入图片 / 加链接”,通过 Controller 操作实现:

Button('插入图片').onClick(() => {
  this.controller.insertImage(url, { width: 100, height: 100 });
});

这种写法类似富文本编辑器工具栏,很适合内容创作场景。


3) 获取当前内容并提交

在用户点击“提交”按钮时获取编辑器内容,然后存回服务器:

const content = this.controller.getContent(); // 得到富文本数据
sendToServer(content);

不同版本的 API 名称可能略有差异,但思路是“Controller 拿当前实际内容”。


七、注意事项和坑(实战积累)


1) 性能问题

富文本编辑器在处理大量图文混排内容时可能较重(尤其是图片 + 嵌套内容)。因此:

  • 在长列表中反复创建 RichEditor 会有性能损耗
  • 尽量避免在短时间内高频创建/销毁组件

如果遇到性能瓶颈,可以考虑在背景线程做内容处理([turn0search13])。


2) 内容高度自适应

RichEditor 在某些场景下不会自动根据内容高度变化,要通过容器的布局约束适配高度,否则可能出现滚动条/裁剪。


3) 版本差异性

官方文档的 API 可能会随版本微调,你在使用 controlleroptions 时,要参考对应 SDK 版本的 API 说明(部分回调、方法名、参数结构等可能会变化)。


八、总结(像人写的结论)

  • RichEditor 是 ArkTS 提供的原生富文本编辑组件,适用于用户创作和图文混排场景。华为开发者
  • 它由 RichEditor + RichEditorController + RichEditorOptions 共同协作实现,可动态插入内容、监听事件等。DEV Community
  • 典型用法包括初始化内容、事件监听、插入图像、样式控制等。DEV Community
  • 实际开发中还要注意性能、布局自适应和版本 API 的细节。
posted @ 2025-12-22 08:54  想喝冰咖啡  阅读(0)  评论(0)    收藏  举报