HarmonyOS开发实战:小分享-TextEditPage文字编辑器——Header+TextArea+工具栏
前言欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net文字编辑器是小分享 App 的核心功能之一用户在此输入文字内容、调整格式最终生成分享卡片。本篇以 TextEditPage 为例讲解Header 导航栏、TextArea 多行输入、Builder 工具栏、State 双向绑定等核心实现。详细 API 可参考 HarmonyOS TextArea 官方文档。一、TextEditPage 完整代码1.1 页面完整实现importrouterfromohos.router;EntryComponentstruct TextEditPage{StatetextContent:string生活的美好在于分享;StatefontSize:number16;build(){Column(){// Header 导航栏Row(){Text(‹).fontSize(24).fontColor(#1A1A1A).onClick((){router.back()})Text(文字编辑).fontSize(18).fontWeight(FontWeight.Bold).fontColor(#1A1A1A).layoutWeight(1).textAlign(TextAlign.Center)Text(完成).fontSize(16).fontColor(#F5A623).onClick((){router.pushUrl({url:pages/PreviewPage})})}.width(100%).padding({left:16,right:16,top:12,bottom:12}).backgroundColor(Color.White)// 编辑区Scroll(){Column({space:16}){// 标题展示Text(this.textContent).fontSize(22).fontWeight(FontWeight.Bold).fontColor(#1A1A1A).width(100%).padding({left:16,right:16,top:20})// 多行输入TextArea({text:生活的美好在于分享...,placeholder:输入你想分享的内容...}).fontSize(15).fontColor(#333333).backgroundColor(Color.Transparent).width(100%).height(300).padding({left:16,right:16}).onChange((value:string){this.textContentvalue})// 配图占位Column(){Text().fontSize(60)}.width(100%).height(180).backgroundColor(#FFF8F0).borderRadius(12).margin({left:16,right:16}).justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)}}.layoutWeight(1)// 底部工具栏Column(){// 工具行Row({space:0}){this.ToolItem(A,样式)this.ToolItem(️,排版)this.ToolItem(,背景)this.ToolItem(,配图)}.width(100%).height(50).backgroundColor(#F8F8F8).justifyContent(FlexAlign.SpaceAround)// 格式行Row({space:0}){this.FormatItem(A,#F5A623)this.FormatItem(T,#333333)this.FormatItem(,#333333)this.FormatItem(,#333333)}.width(100%).height(50).backgroundColor(Color.White).justifyContent(FlexAlign.SpaceAround).shadow({radius:4,color:#10000000,offsetY:-2})}}.width(100%).height(100%).backgroundColor(Color.White)}BuilderToolItem(icon:string,label:string){Column({space:2}){Text(icon).fontSize(18)Text(label).fontSize(10).fontColor(#666666)}.alignItems(HorizontalAlign.Center)}BuilderFormatItem(text:string,color:string){Text(text).fontSize(18).fontColor(color).fontWeight(FontWeight.Bold)}}二、Header 导航栏2.1 三栏布局Header 采用左中右三栏布局Row(){Text(‹)// 左侧返回按钮Text(文字编辑)// 居中标题Text(完成)// 右侧操作按钮}2.2 布局结构位置内容作用样式左侧‹返回fontSize 24, router.back()居中文字编辑标题fontSize 18, Bold, layoutWeight(1)右侧完成确认fontSize 16, #F5A623, 跳转预览页三、TextArea 组件3.1 基本用法TextArea({text:默认文字,placeholder:输入你想分享的内容...}).fontSize(15).fontColor(#333333).backgroundColor(Color.Transparent).width(100%).height(300).padding({left:16,right:16}).onChange((value:string){this.textContentvalue// 状态绑定})3.2 TextArea 常用属性属性作用示例值text初始文本默认文字placeholder占位符输入内容...onChange内容变化回调(value) {}maxLength最大字符数500editable是否可编辑trueheight高度3003.3 代码块TextInput 对比// TextInput - 单行输入TextInput({placeholder:搜索...,text:this.searchKey}).onChange((value){this.searchKeyvalue})// TextArea - 多行输入TextArea({text:this.textContent,placeholder:输入内容...}).height(300).onChange((value){this.textContentvalue})四、State 文本双向绑定4.1 状态声明StatetextContent:string生活的美好在于分享;StatefontSize:number16;4.2 双向绑定TextArea({text:this.textContent,placeholder:输入...}).onChange((value:string){this.textContentvalue// 状态变化 → UI 自动刷新})提示onChange回调中更新State变量ArkUI 会自动重新渲染依赖该变量的 UI 组件。五、Builder 工具栏5.1 Builder 定义BuilderToolItem(icon:string,label:string){Column({space:2}){Text(icon).fontSize(18)Text(label).fontSize(10).fontColor(#666666)}.alignItems(HorizontalAlign.Center)}BuilderFormatItem(text:string,color:string){Text(text).fontSize(18).fontColor(color).fontWeight(FontWeight.Bold)}5.2 Builder 调用Row({space:0}){this.ToolItem(A,样式)this.ToolItem(️,排版)this.ToolItem(,背景)this.ToolItem(,配图)}5.3 Builder 与 Component 对比对比维度BuilderComponent复用粒度UI 片段完整组件状态管理共享外部状态独立状态管理调用方式this.xxx()标签调用适用场景简单 UI 复用复杂独立组件六、编辑区布局6.1 布局结构Scroll (可滚动) └─ Column (space: 16) ├─ Text (标题展示) 22px Bold ├─ TextArea (编辑区) 300px 高度 └─ Column (配图占位) 180px #FFF8F06.2 配图占位区Column(){Text().fontSize(60)}.width(100%).height(180).backgroundColor(#FFF8F0).borderRadius(12).margin({left:16,right:16}).justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)七、页面跳转流程7.1 路由跳转// 返回按钮router.back()// 完成按钮 → 跳转预览页router.pushUrl({url:pages/PreviewPage})7.2 路由策略按钮路由 API说明‹ 返回router.back()返回编辑页✕ 关闭router.back()返回首页完成router.pushUrl()跳转预览页八、常见问题8.1 问题 1TextArea 高度无法自适应原因height属性固定了高度内容超出时会滚动。解决不设置height让 TextArea 根据内容自动扩展。8.2 问题 2State 更新后 UI 不刷新原因直接修改字符串变量是有效的但如果修改对象属性需要创建新对象。九、核心知识点9.1 技术要点TextArea 多行文本输入支持 onChange 双向绑定State 管理编辑内容状态工具栏用 Builder 封装复用Header 三栏布局控制9.2 实战建议onChange 中更新 State 实现双向绑定工具栏用 Builder 复用 UI 片段完成按钮用 pushUrl 跳转预览页总结本文详细讲解了 TextEditPage 文字编辑器的完整实现从Header 三栏布局、TextArea 多行输入、State 双向绑定到Builder 工具栏涵盖了文字编辑器的全部核心功能。下一篇我们将深入 ImageEditPage 图片编辑器的实现。相关资源HarmonyOS TextArea 官方文档TextArea ReferenceHarmonyOS TextInput 文档TextInput ReferenceHarmonyOS Builder 装饰器Builder GuideHarmonyOS State 装饰器State GuideHarmonyOS 状态管理State ManagementHarmonyOS Router 路由Router APIHarmonyOS Scroll 组件Scroll Component开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net附录编辑器的完整实现细节1. 完整的 Builder 工具栏小分享 App 的 TextEditPage 使用两个工具栏行工具行和格式行。工具行包含样式、排版、背景、配图四个功能入口格式行包含字号加粗、斜体、下划线等格式控制。BuilderToolItem(icon:string,label:string){Column({space:2}){Text(icon).fontSize(18)Text(label).fontSize(10).fontColor(#666666)}.alignItems(HorizontalAlign.Center)}2. 路由跳转策略按钮目标API效果‹ 返回上一页router.back()出栈返回完成PreviewPagerouter.pushUrl()入栈跳转3. TextArea 与 TextInput 对比对比维度TextAreaTextInput行数多行单行高度可设置固定高度自适应滚动内容溢出时自动滚动不滚动适用场景文章编辑、评论输入搜索框、用户名4. 编辑区布局的完整代码Scroll(){Column({space:16}){// 标题展示Text(this.textContent).fontSize(22).fontWeight(FontWeight.Bold).fontColor(#1A1A1A).width(100%).padding({left:16,right:16,top:20})// 多行输入TextArea({text:生活的美好在于分享...,placeholder:输入你想分享的内容...}).fontSize(15).fontColor(#333333).backgroundColor(Color.Transparent).width(100%).height(300).padding({left:16,right:16}).onChange((value:string){this.textContentvalue})// 配图占位区Column(){Text().fontSize(60)}.width(100%).height(180).backgroundColor(#FFF8F0).borderRadius(12).margin({left:16,right:16}).justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)}}.layoutWeight(1)5. 完整的页码结构Column (主容器) ├─ Row (Header 导航栏) - 左‹ 中标题 右完成 ├─ Scroll (编辑区) - layoutWeight(1) 撑开 │ └─ Column (space: 16) │ ├─ Text (标题展示) │ ├─ TextArea (编辑区) │ └─ Column (配图占位) └─ Column (底部工具栏) ├─ Row (工具行) └─ Row (格式行)提示以上布局结构是小分享 App 所有编辑器的标准模板后续的 ImageEditPage 和 LinkEditPage 均采用类似的三段式布局。6. 编辑器的扩展方向扩展功能实现方式优先级字号选择State fontSize 滑动选择器高字体颜色State fontColor 色板选择高加粗/斜体State isBold Toggle 切换中对齐方式State textAlign 三选一按钮中配图上传PhotoViewPicker 选择图片高7. 完整的代码文件结构entry/src/main/ets/ ├── pages/ │ └── TextEditPage.ets # 文字编辑器页面 ├── components/ │ └── StyleToolbar.ets # 样式工具栏组件可选抽取 ├── common/ │ └── interfaces.ets # 公共接口定义 └── entryability/ └── EntryAbility.ets # 入口 Ability上述文件结构展示了 TextEditPage 在小分享 App 工程中的位置。第一步了解组件的基本用法第二步掌握组件的核心属性如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力

相关新闻

BQ25713 Buck-Boost充电控制器:宽压输入、动态电源管理与高效设计实战

BQ25713 Buck-Boost充电控制器:宽压输入、动态电源管理与高效设计实战

1. 项目概述与核心价值在笔记本电脑、平板电脑这类便携设备的电源架构里,最让人头疼的问题之一就是如何优雅地处理五花八门的输入电源。你手头可能有一个20V的PD快充头,也可能只有一个5V的USB-A口,而设备内部的电池电压可能在3V到17V之间波动…

2026/7/25 0:23:20阅读更多 →
嵌入式引脚复用设计:从DM505实例解析配置原理与实战避坑

嵌入式引脚复用设计:从DM505实例解析配置原理与实战避坑

1. 项目概述:为什么引脚复用是嵌入式设计的核心在嵌入式硬件设计领域,尤其是面对像德州仪器DM505这类高度集成的片上系统时,一个绕不开的核心议题就是引脚配置与信号复用。我刚接触这类芯片时,也曾被动辄数百页的引脚复用表搞得晕…

2026/7/25 0:23:20阅读更多 →
PPO GRPO GSPO DAPO的Loss计算与代码实现

PPO GRPO GSPO DAPO的Loss计算与代码实现

PPO、GRPO、GSPO、DAPO 的 Loss 计算与代码实现 在强化学习(Reinforcement Learning, RL)领域,策略优化算法一直是研究的核心。从经典的 PPO(Proximal Policy Optimization)到近年来出现的 GRPO(Group Rela…

2026/7/25 0:21:19阅读更多 →
基于事件溯源与React+Node.js构建可回溯时间线Web应用

基于事件溯源与React+Node.js构建可回溯时间线Web应用

最近在追Netflix的科幻悬疑剧《永航员》,一口气看完六集,确实被其宏大的世界观和精巧的悬念设置所吸引。这部剧集不仅是一部科幻作品,更是一次关于时间、记忆与身份的深刻探讨。作为一名开发者,我习惯性地思考其背后的技术隐喻和实…

2026/7/25 1:47:30阅读更多 →
AI写作模型选型指南(企业级落地避坑手册):从法律文书到技术文档,5类高敏感场景实测结果首次公开

AI写作模型选型指南(企业级落地避坑手册):从法律文书到技术文档,5类高敏感场景实测结果首次公开

更多请点击: https://intelliparadigm.com 第一章:AI写作模型选型指南(企业级落地避坑手册):从法律文书到技术文档,5类高敏感场景实测结果首次公开 企业在部署AI写作模型时,常因忽视场景敏感性…

2026/7/25 1:47:30阅读更多 →
【AI邮件营销自动化实战指南】:2024年企业必须掌握的7个高转化率策略

【AI邮件营销自动化实战指南】:2024年企业必须掌握的7个高转化率策略

更多请点击: https://intelliparadigm.com 第一章:AI邮件营销自动化的核心价值与演进趋势 AI驱动的邮件营销自动化正从“批量触达”跃迁至“个体化对话”,其核心价值已超越效率提升,转向客户生命周期价值(CLV&#xf…

2026/7/25 1:47:30阅读更多 →
终极指南:5分钟掌握Cool Request,让Java API调试效率提升300%!

终极指南:5分钟掌握Cool Request,让Java API调试效率提升300%!

终极指南:5分钟掌握Cool Request,让Java API调试效率提升300%! 【免费下载链接】cool-request IDEA API、Java Method debug tools 项目地址: https://gitcode.com/gh_mirrors/co/cool-request 还在为Java接口调试而烦恼吗&#xff1f…

2026/7/25 1:47:30阅读更多 →
Linux 7.2内核Slab分配器性能优化:延迟构建freelist原理与实践

Linux 7.2内核Slab分配器性能优化:延迟构建freelist原理与实践

在 Linux 内核开发领域,每一次针对核心子系统的性能优化都牵动着无数开发者和运维人员的心。近期,Linux 7.2 内核版本中一项关于 Slab 内存分配器的底层重构引起了广泛关注——通过“延迟构建 freelist”这一关键改动,使得单次内存分配操作在特定场景下性能提升最高可达 70%…

2026/7/25 1:47:30阅读更多 →
阿里开源Page Agent:一行代码让网页听懂人话,实现自然语言交互

阿里开源Page Agent:一行代码让网页听懂人话,实现自然语言交互

这次我们来看一个近期在 GitHub 上热度很高的项目:由阿里巴巴开源的 Page Agent 。这是一个运行在网页内部的 JavaScript GUI 智能体,核心目标是用自然语言直接控制网页界面。简单来说,它能让你的网页“听懂人话”,用户说“点击登录按钮”或“在搜索框里输入关键词”,它…

2026/7/25 1:45:30阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 1:01:14阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 1:01:14阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/25 1:01:14阅读更多 →
突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:01:16阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:01:16阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:01:16阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →