HarmonyOS6 ArkTS RichText组件使用文档
文章目录
- 组件概述
- 1 核心作用
- 2 基础使用条件
- 3 基础代码结构
- 可运行示例
- 核心详解
- 1 核心入参:HTML格式字符串
- 1.1 支持的核心HTML标签
- 1.2 支持的常用内联CSS样式
- 2 基础样式属性
- 3 核心事件
- 典型应用场景
- 场景1:复杂HTML内容解析与渲染
- 场景2:Flex布局下的基础富文本展示
- 场景3:Flex布局下的权重占比展示
- 代码示例解析
- 常见问题总结
- 问题1:RichText组件无任何渲染效果,页面仅显示空白
- 问题2:HTML中的样式未生效(如字体颜色、对齐方式)
- 问题3:Flex布局中layoutWeight权重配置无效
- 问题4:富文本内容溢出组件边界,无法完整展示
- 问题5:onComplete事件未触发
- 总结
组件概述
1 核心作用
RichText组件用于解析并渲染HTML格式的字符串内容,将标准HTML标签及内联样式转换为ArkTS原生的可视化界面,支持常见的HTML标签(如h1-h3、p、div、hr、i、u等)和内联CSS样式(如字体、颜色、对齐、背景等),实现无需手动布局的富文本展示,大幅降低富文本开发成本。
2 基础使用条件
- 组件归属:HarmonyOS ArkTS 基础富文本组件,无需额外导入任何模块,直接使用
- 运行环境:API Version 14+(HarmonyOS 6核心版本,完善HTML标签和样式解析能力)
- 内容格式:入参为HTML格式的字符串,支持标签嵌套和内联style样式配置
- 布局特性:可与Flex、Column、Row等布局组件配合,支持尺寸、权重、背景等基础样式配置
3 基础代码结构
@Entry @Component struct RichTextBasicDemo { @State richTextData: string = '<p style="color: blue; text-align: center;">基础富文本展示</p>'; build() { Column() { // 核心用法:传入HTML格式字符串 RichText(this.richTextData) .width('90%') .backgroundColor('#f5f5f5'); } } }可运行示例
// xxx.ets @Entry @Component struct RichTextExample { @State data: string = '<h1 style="text-align: center;">h1标题</h1>' + '<h1 style="text-align: center;"><i>h1斜体</i></h1>' + '<h1 style="text-align: center;"><u>h1下划线</u></h1>' + '<h2 style="text-align: center;">h2标题</h2>' + '<h3 style="text-align: center;">h3标题</h3>' + '<p style="text-align: center;">p常规</p><hr/>' + '<div style="width: 500px;height: 500px;border: 1px solid;margin: 0 auto;">' + '<p style="font-size: 35px;text-align: center;font-weight: bold; color: rgb(24,78,228)">字体大小35px,行高45px</p>' + '<p style="background-color: #e5e5e5;line-height: 45px;font-size: 35px;text-indent: 2em;">' + '<p>这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字</p>'; build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { RichText(this.data) .onStart(() => { console.info('RichText onStart'); }) .onComplete(() => { console.info('RichText onComplete'); }) .width(500) .height(500) .backgroundColor(0XBDDB69) RichText('layoutWeight(1)') .onStart(() => { console.info('RichText onStart'); }) .onComplete(() => { console.info('RichText onComplete'); }) .size({ width: '100%', height: 110 }) .backgroundColor(0X92D6CC) .layoutWeight(1) RichText('layoutWeight(2)') .onStart(() => { console.info('RichText onStart'); }) .onComplete(() => { console.info('RichText onComplete'); }) .size({ width: '100%', height: 110 }) .backgroundColor(0X92C48D) .layoutWeight(2) } } }运行效果如图:
核心详解
1 核心入参:HTML格式字符串
RichText的构造函数唯一入参为HTML格式的字符串,组件会自动解析字符串中的HTML标签和内联style样式,并转换为原生渲染效果。示例中覆盖了HarmonyOS 6支持的核心HTML标签和常用内联样式,是实际开发中最常用的配置方式。
1.1 支持的核心HTML标签
| 标签名 | 核心作用 | 示例用法 |
|---|---|---|
h1/h2/h3 | 标题标签,自带默认加粗效果,h1字号最大,h3最小 | <h1 style="text-align: center;">h1标题</h1> |
p | 段落标签,用于包裹常规文本,支持多行展示 | <p style="font-size: 35px;">常规段落</p> |
div | 容器标签,用于包裹多个子标签,支持统一布局配置 | <div style="width: 500px; margin: 0 auto;">...</div> |
hr | 分隔线标签,实现内容区域的水平分隔 | <hr/> |
i | 斜体标签,将文本设置为斜体样式 | <i>h1斜体</i> |
u | 下划线标签,为文本添加下划线 | <u>h1下划线</u> |
1.2 支持的常用内联CSS样式
| 样式属性 | 取值范围 | 核心作用 | 示例用法 |
|---|---|---|---|
text-align | left/center/right | 文本水平对齐方式 | text-align: center |
font-size | 数字+px(如35px) | 设置字体大小 | font-size: 35px |
font-weight | bold/normal | 设置字体粗细 | font-weight: bold |
color | RGB/十六进制/颜色名 | 设置文本颜色 | color: rgb(24,78,228)/color: #184EE4 |
background-color | 十六进制/颜色名 | 设置背景颜色 | background-color: #e5e5e5 |
line-height | 数字+px(如45px) | 设置文本行高 | line-height: 45px |
text-indent | 数字+em(如2em) | 设置段落首行缩进(2em为两个字符宽度) | text-indent: 2em |
width/height | 数字+px | 设置容器宽度/高度 | width: 500px; height: 500px |
border | 边框样式(如1px solid) | 为容器添加边框 | border: 1px solid |
margin | 数字+px/auto | 设置外边距,margin: 0 auto实现水平居中 | margin: 0 auto |
2 基础样式属性
RichText支持ArkTS通用的基础样式属性,用于配置组件自身的尺寸、背景、布局等,与普通布局组件用法一致,示例中全覆盖核心样式属性:
| 属性名 | 配置方式 | 核心作用 | 示例配置 |
|---|---|---|---|
width/height | 数字/百分比/size({width, height}) | 设置组件宽高 | .width(500)/.size({width: '100%', height: 110}) |
backgroundColor | 十六进制/Color枚举/RGB | 设置组件背景色 | .backgroundColor(0XBDDB69) |
layoutWeight | 数字 | 配合Flex布局,设置组件占父容器的权重比例 | .layoutWeight(1) |
3 核心事件
RichText提供两个生命周期事件,用于监听富文本的解析和渲染过程,方便开发者在对应阶段执行逻辑处理(如加载状态提示、渲染完成后的后续操作),示例中均已配置:
| 事件名 | 回调函数 | 触发时机 | 核心作用 |
|---|---|---|---|
onStart | () => void | 组件开始解析HTML内容时触发 | 监听富文本解析开始,可显示加载提示 |
onComplete | () => void | 组件完成HTML解析并渲染完成时触发 | 监听富文本渲染完成,可隐藏加载提示、执行后续逻辑 |
示例配置方式:
RichText(this.data) .onStart(() => { console.info('RichText onStart'); // 解析开始时打印日志 }) .onComplete(() => { console.info('RichText onComplete'); // 渲染完成时打印日志 });典型应用场景
场景1:复杂HTML内容解析与渲染
实现要点:
- 通过
@State定义HTML格式的字符串变量data,整合h1-h3标题、p段落、i/u格式化标签、hr分隔线、div容器标签; - 为不同标签配置个性化内联样式:标题居中、段落设置字体大小/颜色/行高/首行缩进、div容器固定宽高+边框+水平居中;
- 为
RichText设置固定宽高和背景色,保证富文本内容的展示区域固定。
核心代码片段:
@State data: string = '<h1 style="text-align: center;">h1标题</h1>' + '<h1 style="text-align: center;"><i>h1斜体</i></h1>' + '<div style="width: 500px;height: 500px;border: 1px solid;margin: 0 auto;">' + '<p style="font-size: 35px;text-align: center;font-weight: bold; color: rgb(24,78,228)">字体大小35px,行高45px</p>' + '</div>'; // 渲染复杂HTML内容 RichText(this.data) .width(500) .height(500) .backgroundColor(0XBDDB69) .onStart(() => { console.info('RichText onStart'); }) .onComplete(() => { console.info('RichText onComplete'); });场景2:Flex布局下的基础富文本展示
核心需求:在Flex布局中实现简单富文本内容的展示,配置组件100%宽度、固定高度和背景色,适用于导航栏说明、简单提示语等轻量富文本场景。
实现要点:
RichText入参为简单文本字符串,无需复杂HTML标签;- 通过
size({ width: '100%', height: 110 })设置组件自适应父容器宽度、固定高度; - 配置背景色,提升界面视觉区分度。
核心代码片段:
RichText('layoutWeight(1)') .size({ width: '100%', height: 110 }) .backgroundColor(0X92D6CC) .onStart(() => { console.info('RichText onStart'); }) .onComplete(() => { console.info('RichText onComplete'); });场景3:Flex布局下的权重占比展示
核心需求:在Flex布局中,通过layoutWeight属性设置多个RichText组件的占比比例,实现父容器空间的按权重分配,适用于多区域富文本分栏展示、底部多富文本提示等场景。
实现要点:
- 多个
RichText组件同级放置在Flex容器中,均设置width: 100%和固定高度; - 分别配置
layoutWeight(1)和layoutWeight(2),实现两个组件在Flex容器中按1:2的比例分配剩余空间; - 为不同组件设置不同背景色,直观展示权重占比效果。
核心代码片段:
// 权重1,占父容器1/3空间 RichText('layoutWeight(1)') .size({ width: '100%', height: 110 }) .backgroundColor(0X92D6CC) .layoutWeight(1); // 权重2,占父容器2/3空间 RichText('layoutWeight(2)') .size({ width: '100%', height: 110 }) .backgroundColor(0X92C48D) .layoutWeight(2);代码示例解析
配套代码为一个完整的@Entry组件RichTextExample,无额外子组件,结构简洁清晰,可直接运行,整体结构如下:
- 状态变量:定义
@State data变量,存储复杂HTML格式的富文本字符串,整合多种标签和样式; - 根布局:使用
Flex作为页面根布局,配置direction: FlexDirection.Column(垂直布局)、alignItems: ItemAlign.Center(子组件水平居中)、justifyContent: FlexAlign.Center(子组件垂直居中),实现页面整体居中效果; - 核心组件:三个
RichText组件依次排列,分别实现复杂HTML解析、基础Flex布局展示、权重占比展示三大场景; - 统一配置:所有
RichText组件均配置onStart和onComplete事件,监听解析和渲染过程,同时配置个性化的尺寸、背景、权重属性。
常见问题总结
问题1:RichText组件无任何渲染效果,页面仅显示空白
- 排查点1:确认入参为合法的HTML格式字符串,避免字符串为空或格式错误(如标签未闭合、样式属性缺少冒号/分号);
- 排查点2:确认使用的HTML标签为HarmonyOS支持的核心标签,未使用form、img等未支持标签;
- 排查点3:确认
RichText组件设置了有效宽高,未设置宽高会导致组件尺寸为0,无法显示内容。
问题2:HTML中的样式未生效(如字体颜色、对齐方式)
- 排查点1:确认样式配置在内联style属性中,未使用外部CSS或内部style标签;
- 排查点2:确认样式属性名和取值符合规范(如
text-align而非textAlign,颜色值带#或rgb(),字体大小带px); - 排查点3:确认样式作用的标签为HarmonyOS支持的标签,部分样式仅对特定标签生效(如
text-indent仅对p标签生效)。
问题3:Flex布局中layoutWeight权重配置无效
- 排查点1:确认
RichText的父容器为Flex布局,非Column/Row等其他布局; - 排查点2:确认
RichText的宽度设置为100%或未设置固定宽度,固定宽度会导致权重分配失效; - 排查点3:确认同级的其他Flex子组件也配置了
layoutWeight,或父容器有剩余空间可分配。
问题4:富文本内容溢出组件边界,无法完整展示
- 排查点1:确认
RichText组件的宽高大于等于HTML内容中容器的宽高,避免内容超出组件范围; - 排查点2:若HTML内容为动态加载,可在
onComplete事件中获取组件实际渲染高度,动态调整RichText的高度; - 排查点3:移除HTML内容中不必要的固定宽高设置,让内容自适应
RichText组件的尺寸。
问题5:onComplete事件未触发
- 排查点1:确认HTML字符串格式合法,解析过程无错误,解析失败会导致
onComplete无法触发; - 排查点2:确认
RichText组件已被正确渲染到页面中,未被其他组件遮挡或未加入布局树; - 排查点3:确认项目编译版本为API 14+,低版本对部分HTML标签解析支持不佳,可能导致解析流程中断。
总结
RichText是HarmonyOS 6 ArkTS中实现富文本展示的核心组件,通过解析HTML格式字符串,快速实现多样化的富文本渲染效果,无需手动通过Span、Text等组件拼接布局,大幅提升富文本开发效率。该组件支持核心HTML标签和常用内联CSS样式,可与Flex等布局组件灵活配合,同时提供解析和渲染的生命周期事件,满足从简单提示到复杂文章详情的各类富文本展示需求。
如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力
