HarmonyOS鸿蒙Next的RichEditor组件如何用代码实现滚动文本。
HarmonyOS鸿蒙Next的RichEditor组件如何用代码实现滚动文本。 RichEditor如何实现跑马灯那种效果?
希望能够使用RichEditor实现富文本的效果,用户可以编辑,之后变成只读状态,
但是richEditor的组件库没有text丰富,想知道只读状态下如何实现跑马灯。
开发者你好,RichEditor支持使用addBuilderSpan添加一个CustomBuilder类型构造函数。可以显示一个自定义的跑马灯文本。可以参考如下demo实现:
@Entry
@Component
struct RichEditorTextSpan {
controller: RichEditorController = new RichEditorController();
private my_builder: CustomBuilder = undefined;
build() {
Column({ space: 10 }) {
RichEditor({ controller: this.controller })
.onReady(() => {
// 往编辑器新增10个字符
this.controller.addTextSpan('111111111\n', {
style: { fontColor: Color.Black, fontSize: 32 }
});
})
.width('80%')
.height('30%')
.border({ width: 1, radius: 16 })
.draggable(false);
Button('新增内容').onClick(() => {
this.my_builder = () => {
this.text1()
};
console.log("number======>"+this.controller.addBuilderSpan(this.my_builder))
});
}
.width('100%')
.height('100%');
}
@Builder
text1(){
Text('当文本溢出其尺寸时,文本将滚动显示。When the text overflows its dimensions, the text will scroll for displaying.')
.width(250)
.textOverflow({ overflow: TextOverflow.MARQUEE })
.maxLines(1)
.fontSize(12)
.border({ width: 1 })
.padding(10)
}
}
更多关于HarmonyOS鸿蒙Next的RichEditor组件如何用代码实现滚动文本。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
自动滚动依赖于scroll滑动组件
可以将RichEditor组件视为一个静态的组件,父组件是scroll,并将文字的间距+大小设置未滚动一次的间距
使用定时器+scrollTo实现自动滚动
参考文档:
https://developer.huawei.com/consumer/cn/doc/architecture-guides/news-v1_2-ts_123-0000002410834090
RichEditor 本身更偏向“图文混排和交互式编辑”,只读态不等于自动具备 Text/Marquee 的跑马灯能力,所以不建议直接把 RichEditor 当跑马灯组件用。
可以按场景拆成两套展示:编辑态继续使用 RichEditor 保存结构化内容;只读展示态如果只是单行文本,优先把纯文本提取出来交给 Marquee,或者 Text 配合 TextOverflow.MARQUEE;如果必须保留富文本样式,则建议把只读富文本放进一个固定宽度容器里,通过 translate/属性动画做整体横向位移,并用 clip 裁剪可视区域。
需要注意两点:Marquee 官方定位是滚动展示单行文本,不支持富文本子节点;富文本如果包含图片、不同字号或多行内容,动画方案要先测量实际内容宽度,再控制 start/end 位移,否则会出现滚动距离不准或内容截断。
使用 Scroll 容器包裹 RichEditor 组件,并指定固定高度或 maxHeight 即可实现滚动。若 RichEditor 提供了 scrollable 属性,直接设为 true。代码示例:
Scroll() {
RichEditor({ controller: this.controller })
.height('100%')
}
.height('300vp')
当 RichEditor 转为只读时,可通过切换显示隐藏的 Text 组件来实现跑马灯效果。核心是利用 Text 的 textOverflow(TextOverflow.Marquee) 属性,配合 maxLines(1) 与固定宽度,即可自动水平滚动。
具体步骤:
- 获取 RichEditor 的纯文本(或 styledString)。
- 条件渲染:只读时显示 Text,隐藏 RichEditor。
- 对 Text 设置跑马灯属性。
简单代码示例:
@State isReadOnly: boolean = false
@State textContent: string = ''
private richEditorController: RichEditorController = new RichEditorController()
build() {
Column() {
if (this.isReadOnly) {
Text(this.textContent)
.textOverflow({ overflow: TextOverflow.Marquee })
.maxLines(1)
.width('100%')
} else {
RichEditor({ controller: this.richEditorController })
.onReady(() => {
// 编辑完成时获取内容
this.textContent = this.richEditorController.getSpans()
.map(span => span.value).join('')
})
}
}
}
如需保留富文本样式,可提取 styledString 后,用 Marquee 组件包裹多个 Text 模拟滚动,或使用定时器平移容器实现自定义动画。

