当前位置: 首页 > article >正文

HarmonyOS6 ArkTS RichEditor组件使用文档

文章目录完整代码核心API1. 控制器 RichEditorController2. 基础属性3. 核心事件4. 自定义能力总结1. 插入富文本内容2. 修改文本样式3. 获取选区信息4. 自定义键盘RichEditor是 HarmonyOS6 提供的富文本编辑组件支持文本样式编辑、图片/Symbol插入、自定义键盘、自定义长按菜单、选区操作、事件监听等完整富文本能力广泛适用于笔记、文章编辑、消息输入、表单富文本等场景。完整代码Entry Component struct RichEditorFullDemo { controller: RichEditorController new RichEditorController(); State selectStart: number -1; State selectEnd: number -1; State selectContent: string ; build() { Column({ space: 10 }) { Text(RichEditor 完整功能演示) .fontSize(22) .fontWeight(FontWeight.Bold) .margin({ top: 15 }); Text(选中范围[${this.selectStart}, ${this.selectEnd}]) .fontSize(14) .width(90%) .textAlign(TextAlign.Start); Text(选中内容${this.selectContent}) .fontSize(14) .width(90%) .textAlign(TextAlign.Start); Row({ space: 8 }) { Button(加粗).width(70).onClick(() { this.controller.updateSpanStyle({ start: this.selectStart, end: this.selectEnd, textStyle: { fontWeight: FontWeight.Bolder } }); }); Button(红色).width(70).onClick(() { this.controller.updateSpanStyle({ start: this.selectStart, end: this.selectEnd, textStyle: { fontColor: #FF0000 } }); }); Button(删除选中).width(90).onClick(() { this.controller.deleteSpans({ start: this.selectStart, end: this.selectEnd }); this.selectStart -1; this.selectEnd -1; this.selectContent ; }); }.width(90%); RichEditor({ controller: this.controller }) .placeholder(请输入富文本内容..., { fontColor: #999, font: { size: 16 } }) .caretColor(#007DFF) .selectedBackgroundColor(#a0c8ff) .copyOptions(CopyOptions.LocalDevice) .enablePreviewText(true) .enterKeyType(EnterKeyType.NEW_LINE) .barState(BarState.Auto) .onReady(() { this.controller.addTextSpan(Hello HarmonyOS , { style: { fontSize: 18, fontColor: #333 } }); this.controller.addSymbolSpan($r(sys.symbol.a_5G), { style: { fontSize: 20 } }); this.controller.addImageSpan($r(sys.media.ohos_app_icon), { imageStyle: { size: [40vp, 40vp], verticalAlign: ImageSpanAlignment.CENTER } }); }) .onSelect((selection: RichEditorSelection) { this.selectStart selection.selection[0]; this.selectEnd selection.selection[1]; this.selectContent ; selection.spans.forEach((item) { const textItem item as RichEditorTextSpanResult; if (textItem.value ! undefined) { this.selectContent textItem.value; } }); }) .aboutToIMEInput((value: RichEditorInsertValue) { return true; }) .onIMEInputComplete((result: RichEditorTextSpanResult) {}) .aboutToDelete((value: RichEditorDeleteValue) { return true; }) .onDeleteComplete(() {}) .onPaste((event?: PasteEvent) {}) .onCopy((event: CopyEvent) {}) .onCut((event: CutEvent) {}) .onEditingChange((isEditing: boolean) {}) .onDidChange(() {}) .onSubmit((enterKey: EnterKeyType) {}) .customKeyboard(this.CustomKeyboardBuilder()) .bindSelectionMenu(RichEditorSpanType.TEXT, this.CustomMenuBuilder(), RichEditorResponseType.LONG_PRESS) .width(90%) .height(300) .border({ width: 1, color: #ddd }) .backgroundColor(#f9f9f9) .padding(10) .margin({ top: 10 }); } .width(100%) .backgroundColor(#fff) .padding({ bottom: 30 }); } Builder CustomKeyboardBuilder() { Column() { Grid() { GridItem() { Button(1).width(80).height(40).onClick(() this.insertText(1)) } GridItem() { Button(2).width(80).height(40).onClick(() this.insertText(2)) } GridItem() { Button(3).width(80).height(40).onClick(() this.insertText(3)) } GridItem() { Button(4).width(80).height(40).onClick(() this.insertText(4)) } GridItem() { Button(5).width(80).height(40).onClick(() this.insertText(5)) } GridItem() { Button(6).width(80).height(40).onClick(() this.insertText(6)) } GridItem() { Button(7).width(80).height(40).onClick(() this.insertText(7)) } GridItem() { Button(8).width(80).height(40).onClick(() this.insertText(8)) } GridItem() { Button(9).width(80).height(40).onClick(() this.insertText(9)) } GridItem() { Button(0).width(80).height(40).onClick(() this.insertText(0)) } GridItem() { Button(删除).width(80).height(40).onClick(() this.doDelete()) } GridItem() { Button(确认).width(80).height(40).onClick(() this.controller.stopEditing()) } } .maxCount(3) .columnsGap(5) .rowsGap(5) } .backgroundColor(#eee) .padding(5) } Builder CustomMenuBuilder() { Row({ space: 10 }) { Button(红色).onClick(() { this.controller.updateSpanStyle({ start: this.selectStart, end: this.selectEnd, textStyle: { fontColor: #f00 } }); }); Button(加粗).onClick(() { this.controller.updateSpanStyle({ start: this.selectStart, end: this.selectEnd, textStyle: { fontWeight: FontWeight.Bold } }); }); Button(复制).onClick(() { this.controller.setSelection(this.selectStart, this.selectEnd); }); } .padding(5) .backgroundColor(#fff) .border({ width: 1, color: #ccc }) .borderRadius(5); } insertText(text: string) { this.controller.addTextSpan(text, { offset: this.controller.getCaretOffset() }); } doDelete() { const offset this.controller.getCaretOffset(); if (offset 0) { this.controller.deleteSpans({ start: offset - 1, end: offset }); } } }运行效果如图核心API1. 控制器 RichEditorControllernew RichEditorController()创建富文本控制器addTextSpan()插入文本addSymbolSpan()插入系统图标addImageSpan()插入图片updateSpanStyle()修改选区文本样式deleteSpans()删除选区内容setSelection()设置选区getCaretOffset()获取光标位置stopEditing()收起键盘/结束编辑2. 基础属性属性作用placeholder占位提示文字及样式caretColor光标颜色selectedBackgroundColor选中文本背景色copyOptions复制权限配置enablePreviewText开启输入预上屏enterKeyType回车键类型换行/搜索/完成barState滚动条显示模式3. 核心事件事件触发时机onReady组件初始化完成onSelect文本选区变化aboutToIMEInput输入前拦截onIMEInputComplete输入完成aboutToDelete删除前拦截onPaste/onCopy/onCut粘贴/复制/剪切onEditingChange编辑状态变化onDidChange内容修改完成4. 自定义能力customKeyboard()自定义输入键盘bindSelectionMenu()绑定长按自定义菜单支持文本选区触发、长按触发总结1. 插入富文本内容文本addTextSpan系统图标addSymbolSpan图片addImageSpan支持尺寸、对齐2. 修改文本样式this.controller.updateSpanStyle({start:起始位置,end:结束位置,textStyle:{fontWeight:FontWeight.Bold,fontColor:#FF0000}})3. 获取选区信息selection.selection[0]选区开始selection.selection[1]选区结束遍历spans获取文本内容4. 自定义键盘使用Builder构建自定义数字键盘支持插入、删除、确认功能。如果这篇文章对你有帮助欢迎点赞、收藏、关注你的支持是持续创作的动力

相关文章:

HarmonyOS6 ArkTS RichEditor组件使用文档

文章目录完整代码核心API1. 控制器 RichEditorController2. 基础属性3. 核心事件4. 自定义能力总结1. 插入富文本内容2. 修改文本样式3. 获取选区信息4. 自定义键盘RichEditor 是 HarmonyOS6 提供的富文本编辑组件,支持文本样式编辑、图片/Symbol插入、自定义键盘、…...

vis-timeline 事件处理完全教程:点击、拖拽和自定义回调函数

vis-timeline 事件处理完全教程:点击、拖拽和自定义回调函数 【免费下载链接】vis-timeline 📅 Create a fully customizable, interactive timelines and 2d-graphs with items and ranges. 项目地址: https://gitcode.com/gh_mirrors/vi/vis-timelin…...

【2026 Blazor企业级准入标准】:微软Partner认证团队强制要求的6项安全/可观测性配置清单

第一章:Blazor企业级准入标准的演进背景与合规意义 随着.NET平台持续向云原生与全栈统一架构演进,Blazor已从早期实验性框架成长为支撑关键业务系统的主流技术栈。企业级应用对安全性、可审计性、长期可维护性及跨团队协作一致性的要求,倒逼开…...

HarmonyOS6 ArkTS TextInput组件使用文档

文章目录完整代码核心基础配置1. 组件初始化参数2. 控制器创建3. 响应式状态变量基础样式自定义1. 占位符样式定制2. 输入文字样式定制3. 光标与文本对齐样式4. 通用布局样式核心输入控制能力1. 输入类型切换(InputType)2. 字数限制与计数器3. 输入过滤&…...

jQuery-contextMenu:构建现代化Web应用上下文菜单的终极指南

jQuery-contextMenu:构建现代化Web应用上下文菜单的终极指南 【免费下载链接】jQuery-contextMenu jQuery contextMenu plugin & polyfill 项目地址: https://gitcode.com/gh_mirrors/jq/jQuery-contextMenu jQuery-contextMenu 是一款功能强大的上下文菜…...

三、vs code快捷键

1.设置Ctrl,2.还原整个窗口布局命令面板 Ctrl Shift P → 输入 View: Reset View Locations → 回车,所有面板回归默认位置。...

Windows终极免费PDF处理工具:Poppler完整使用指南

Windows终极免费PDF处理工具:Poppler完整使用指南 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows上的PDF处理而烦恼吗&a…...

AutoDL租完服务器别只用Jupyter!Pycharm远程开发全链路配置指南(从开机到跑通第一个模型)

AutoDL租完服务器别只用Jupyter!Pycharm远程开发全链路配置指南(从开机到跑通第一个模型) 当你在AutoDL上租用了强大的GPU服务器后,是否还在忍受Web版Jupyter Notebook的局限?本文将带你解锁专业开发者的终极武器——…...

nli-MiniLM2-L6-H768部署案例:轻量级NLI模型如何替代BERT-large做语义精排

nli-MiniLM2-L6-H768部署案例:轻量级NLI模型如何替代BERT-large做语义精排 1. 模型概述 nli-MiniLM2-L6-H768 是一个专为自然语言推理(NLI)任务优化的轻量级模型,其核心能力是判断两段文本之间的语义关系。与传统的BERT-large等…...

麒麟V10离线环境生存指南:如何正确下载并安装Ubuntu deb包(附国内镜像源地址)

麒麟V10离线环境高效运维实战:deb包管理与镜像源深度解析 在政企级IT基础设施中,麒麟操作系统V10凭借其安全稳定的特性已成为关键业务系统的首选。但受限于特殊网络环境,许多运维人员常陷入"无外网如何安装软件"的困境。本文将系统…...

AUO友达5.7寸液晶屏幕G057VN01 V2.20规格宽温液晶模组

工业设备显示屏从最初的 TN 单色面板,发展到如今的 AHVA(Advanced Hyper-Viewing-Angle)全视角架构,显示技术已趋成熟。随着物联网终端、智能制造与能源装备的普及,显示器件被要求在 −30C 至 85C 的极端温区中仍保持色…...

【立煌】BOE京东方EV101WUM-N81规格10.1寸液晶屏幕

在当今的工业与户外显示领域,高亮度与高分辨率 正成为核心竞争指标。京东方(BOE)推出的 EV101WUM-N81 以 1000 cd/m 超高亮度 与 19201200 WUXGA 分辨率 重新定义了10.1英寸级工业液晶屏的显示标准。该面板采用 ADS(Advanced Supe…...

CSS如何制作标签页效果_利用display flex与盒模型

Flex布局标签页头部最可控,需设flex容器、防换行、处理min-width;切换内容用visibility:hidden更优;必同步aria-selected和role属性;移动端优先用scroll-snap实现滑动。用 display: flex 布局标签页头部,别碰 float 或…...

【立煌】G150XTN06.0规格友达15寸工业液晶屏幕AUO液晶模组

在工业自动化、机台控制、医疗仪器及安防显示等应用领域,15英寸液晶模组长期被视为“工业标准尺寸”。友达(AUO)推出的G150XTN06.0正是其中的代表型号之一。这款屏凭借宽温设计、可更换背光、内置LED驱动器与6/8位灰阶兼容特性,实…...

PyTorch训练循环中zero_grad()的正确调用位置详解

在PyTorch中,optimizer.zero_grad()必须在loss.backward()之前执行,且绝不能位于backward()与step()之间;其具体位置(循环开头或backward()前一刻)不影响梯度计算逻辑,但影响代码可读性与多优化器场景下的正…...

App Metrics高级用法:自定义指标、过滤器和采样策略

App Metrics高级用法:自定义指标、过滤器和采样策略 【免费下载链接】AppMetrics App Metrics is an open-source and cross-platform .NET library used to record and report metrics within an application. 项目地址: https://gitcode.com/gh_mirrors/app/App…...

深度剖析Cursor-Free-VIP:突破AI编程助手限制的设备指纹重构技术

深度剖析Cursor-Free-VIP:突破AI编程助手限制的设备指纹重构技术 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reache…...

django-cacheops实战案例:构建高性能电商系统的缓存架构设计

django-cacheops实战案例:构建高性能电商系统的缓存架构设计 【免费下载链接】django-cacheops A slick ORM cache with automatic granular event-driven invalidation. 项目地址: https://gitcode.com/gh_mirrors/dj/django-cacheops 在当今电商领域&#…...

告别杂乱连线!用Proteus网络标签和总线功能高效绘制STM32核心板原理图

告别杂乱连线!用Proteus网络标签和总线功能高效绘制STM32核心板原理图 当你在Proteus中绘制一个包含STM32 MCU和多个外设的复杂原理图时,是否经常遇到这样的困扰:密密麻麻的连线像蜘蛛网一样交织在一起,不仅难以阅读,后…...

django-cacheops模板集成:Django和Jinja2缓存标签完全手册

django-cacheops模板集成:Django和Jinja2缓存标签完全手册 【免费下载链接】django-cacheops A slick ORM cache with automatic granular event-driven invalidation. 项目地址: https://gitcode.com/gh_mirrors/dj/django-cacheops django-cacheops是一个强…...

浦语灵笔2.5-7B多场景:支持教育、金融、政务、医疗等6大垂直领域

浦语灵笔2.5-7B多场景实战:解锁教育、金融、政务、医疗等6大垂直领域 今天咱们来聊聊一个特别实用的AI工具——浦语灵笔2.5-7B。你可能听说过很多大模型,但这款有点不一样,它不仅能看懂文字,还能看懂图片,甚至能回答关…...

云数据库(RDS)与自建数据库对比

云数据库(RDS)与自建数据库对比:如何选择更适合的方案? 在数字化转型的浪潮中,数据库作为企业核心数据存储与管理的基石,其选择至关重要。云数据库(RDS)和自建数据库是两种主流方案…...

别再只会用‘blue‘和‘red‘了!Matplotlib plt.scatter颜色参数c的保姆级配色指南

别再只会用blue和red了!Matplotlib plt.scatter颜色参数c的保姆级配色指南 当你在Python中用Matplotlib绘制散点图时,是否经常为颜色选择而苦恼?那些默认的蓝色和红色点虽然简单,但在专业报告或论文中往往显得单调乏味。plt.scatt…...

XUnity Auto Translator:Unity游戏实时翻译完全指南

XUnity Auto Translator:Unity游戏实时翻译完全指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity Auto Translator是一款功能强大的Unity游戏本地化工具,能够实时翻译游戏…...

别再手动调参了!用nnU-Net自动搞定医学图像分割,从预处理到后处理保姆级配置指南

解放双手:nnU-Net如何用全自动流程重塑医学图像分割 医学图像分割领域的研究者们,是否已经厌倦了为每个新数据集反复调整网络架构、超参数和预处理流程?当面对CT、MRI等不同模态数据时,那些看似微小的参数调整往往需要耗费数周时间…...

Docker跨架构镜像拉取失败?5步精准定位glibc版本、内核模块、CPU特性三大隐藏冲突源

第一章:Docker跨架构镜像拉取失败的典型现象与系统性认知当开发者在 ARM64 主机(如 Apple M1/M2、树莓派或 AWS Graviton 实例)上执行 docker pull 命令时,常遭遇镜像拉取成功但运行失败、容器立即退出、或提示 exec format error…...

MySQL如何通过MVCC提升并发读性能_理解undo log版本链

快照读不用锁靠Undo Log版本链实现,SELECT通过ReadView沿DB_ROLL_PTR链追溯可见版本;ReadView用m_up_limit_id、m_low_limit_id和m_creator_trx_id三值判断版本可见性。快照读为什么不用锁?靠的是Undo Log版本链MySQL的SELECT不加锁&#xff…...

GNSS地球自转改正及卫星码偏差改正学习笔记

一、地球自转改正此改正的本质是解决 “信号传播期间,坐标系发生了旋转” 所引入的几何偏差。1. 物理本质与来源核心问题(Sagnac效应):GNSS信号以光速从卫星传播到接收机需要一定时间(约65-85ms)。在这段时…...

BraTS数据集保姆级使用指南:从下载、预处理到可视化(附Python脚本)

BraTS数据集实战手册:从零构建医学影像处理流水线 第一次打开BraTS数据集时,我被那些密密麻麻的NIfTI文件弄得晕头转向——四种模态、三种标注、数百个病例,每个文件都像是一本需要特殊解码器的三维图书。作为过来人,我完全理解初…...

cv_unet_image-colorization参数详解:render_factor对细节保留与处理时间的权衡

cv_unet_image-colorization参数详解:render_factor对细节保留与处理时间的权衡 1. 引言 你是否遇到过这样的场景:找到一张珍贵的黑白老照片,想让它恢复色彩,却发现上色工具要么处理得太慢,要么生成的彩色照片细节模…...