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

HarmonyOS6 ArkTS TextArea组件使用文档

文章目录

    • 完整代码
    • 核心基础配置
      • 1. 组件初始化参数
      • 2. 控制器创建
    • 样式自定义配置
      • 1. 占位符样式定制
      • 2. 输入文字样式定制
      • 3. 光标与对齐样式
      • 4. 基础布局样式
    • 输入与显示控制
      • 1. 字数限制与计数器
      • 2. 显示行数与超长处理
      • 3. 输入过滤
    • 全量事件监听
      • 1. 内容变化事件
      • 2. 编辑状态事件
      • 3. 文本选中事件
      • 4. 剪贴板操作事件
    • 组件运行效果
    • 官方API扩展属性

完整代码

@Entry @Component struct TextAreaFullDemo { @State inputText: string = ''; controller: TextAreaController = new TextAreaController(); build() { Column({ space: 20 }) { Text("TextArea 完整功能演示") .fontSize(22) .fontWeight(FontWeight.Bold) .margin({ top: 30 }); // 多行输入框 TextArea({ text: this.inputText, placeholder: "请输入内容,支持多行、自动换行、字数限制...", controller: this.controller }) // 提示文字样式 .placeholderColor("#999999") .placeholderFont({ size: 16, weight: FontWeight.Normal }) // 输入文字样式 .fontSize(16) .fontColor("#333333") .fontWeight(FontWeight.Normal) // 光标颜色 .caretColor("#007DFF") // 对齐方式 .textAlign(TextAlign.Start) // 最大输入字符数 .maxLength(100) // 显示计数器 .showCounter(true, { thresholdPercentage: 80, highlightBorder: true }) // 最大行数,超出滚动 .maxLines(5) // 超长省略 .textOverflow(TextOverflow.Ellipsis) // 输入过滤:仅允许字母、数字、中文 .inputFilter('[a-zA-Z0-9\u4e00-\u9fa5\s]*', (invalid) => { console.info("过滤非法字符:", invalid); }) // 复制/剪切/粘贴 监听 .onCopy((value) => console.info("复制内容:", value)) .onCut((value) => console.info("剪切内容:", value)) .onPaste((value) => console.info("粘贴内容:", value)) // 内容变化监听 .onChange((value) => { this.inputText = value; }) // 编辑状态变化 .onEditChange((isEditing) => { console.info("是否正在编辑:", isEditing); }) // 文本选中变化 .onTextSelectionChange((start, end) => { console.info("选中范围:", start, "-", end); }) // 基础样式 .width("90%") .height(180) .backgroundColor("#f8f8f8") .border({ width: 1, color: "#e0e0e0" }) .borderRadius(12) .padding(15) // 实时显示输入内容 Text(`已输入:${this.inputText.length}/100 字`) .fontSize(14) .fontColor("#666") .width("90%") .textAlign(TextAlign.Start) } .width('100%') .backgroundColor('#FFFFFF') .padding({ bottom: 40 }) } }

运行效果如图:

核心基础配置

1. 组件初始化参数

TextArea通过构造函数传入核心初始化参数,实现初始值绑定、占位符提示和控制器关联,是组件使用的基础,参数说明如下:

构造参数传入值官方API说明功能作用
text响应式变量(如this.inputText)输入框初始文本内容实现输入内容与状态变量的双向绑定,变量更新同步输入框,输入框变化更新变量
placeholder字符串输入框为空时的提示文本提示用户输入规则或内容方向,提升交互体验
controllerTextAreaController实例输入框控制器用于后续扩展光标定位、文本选中、关闭编辑态等高级操作

2. 控制器创建

通过TextAreaController创建组件控制器,为输入框提供高级操作能力,创建方式简单,直接实例化即可:

controller: TextAreaController = new TextAreaController();

官方扩展能力:可通过控制器调用caretPosition()设置光标位置、setTextSelection(start, end)选中指定文本、stopEditing()关闭编辑状态。

样式自定义配置

1. 占位符样式定制

针对输入框为空时的提示文本,通过placeholderColorplaceholderFont实现颜色、字号、粗细的定制,让占位符与整体界面风格统一:

链式属性传入值功能作用
placeholderColor颜色值(十六进制/RGB/系统色)设置占位符文本颜色,推荐使用浅灰色提升视觉层次感
placeholderFont字体配置对象(size/weight/family)设置占位符字号、粗细、字体,与输入文字样式区分或统一

2. 输入文字样式定制

对用户输入的文本进行样式配置,支持字号、颜色、粗细的自定义,与占位符样式配合,保证文本展示的可读性:

链式属性传入值功能作用
fontSize数值设置输入文字字号,单位默认vp,适配不同屏幕
fontColor颜色值设置输入文字颜色,推荐使用深灰色保证可读性
fontWeightFontWeight枚举设置输入文字粗细,可选Normal/Medium/Bold等

3. 光标与对齐样式

定制输入光标颜色和文本对齐方式,适配不同的界面布局和交互需求:

链式属性传入值功能作用
caretColor颜色值设置输入光标颜色,推荐使用主题色提升视觉焦点
textAlignTextAlign枚举设置文本对齐方式,可选Start(左对齐)/Center(居中)/End(右对齐),推荐使用Start适配多语言

4. 基础布局样式

继承鸿蒙通用布局样式,实现输入框宽高、背景、边框、圆角、内边距的定制,让输入框融入整体界面设计,属性说明如下:

链式属性传入值功能作用
width/height数值/百分比设置输入框宽高,推荐宽度使用百分比适配不同设备
backgroundColor颜色值设置输入框背景色,推荐浅灰色提升输入区分度
border边框配置对象设置输入框边框宽度、颜色,实现边框效果
borderRadius数值设置输入框圆角,让界面更柔和
padding数值/对象设置输入框内边距,避免文字与边框重叠,提升可读性

输入与显示控制

1. 字数限制与计数器

通过maxLengthshowCounter组合,实现最大输入字符数限制实时字数统计,并支持阈值提醒和超限样式高亮,是表单输入场景的高频能力:

链式属性传入值官方API说明功能作用
maxLength数值设置最大可输入字符数超出后禁止继续输入,从源头限制输入内容长度
showCounter布尔值+配置对象是否显示字数计数器,配置阈值和边框高亮第一个参数为true时显示计数器;配置对象中thresholdPercentage为计数阈值(如80表示80%时提醒),highlightBordertrue时超限后边框高亮

2. 显示行数与超长处理

控制输入框的最大显示行数,超出后自动滚动,并对超长文本进行省略处理,保证输入框布局稳定,不超出界面范围:

链式属性传入值官方API说明功能作用
maxLines数值设置输入框最大显示行数超出后输入框出现滚动条,文本可上下滑动查看,保持布局高度固定
textOverflowTextOverflow枚举设置文本溢出处理方式传入TextOverflow.Ellipsis实现超长文本省略,注意:TextArea的该属性直接传枚举,与Text组件传对象的用法不同

3. 输入过滤

通过inputFilter实现正则表达式过滤非法字符,只允许符合规则的字符输入,同时可监听过滤的非法字符,适用于手机号、账号、密码等有输入规则的场景:

.inputFilter('[a-zA-Z0-9\u4e00-\u9fa5\s]*', (invalid) => { console.info("过滤非法字符:", invalid); })
参数1(正则表达式)功能
[a-zA-Z0-9\u4e00-\u9fa5\s]*仅允许输入字母、数字、中文和空格,其他字符将被过滤
参数2(回调函数)监听被过滤的非法字符,可用于日志打印或用户提示

全量事件监听

TextArea提供丰富的事件回调,覆盖内容变化、编辑状态、文本选中、剪贴板操作等全场景,满足各类交互需求,核心事件说明如下:

1. 内容变化事件

.onChange((value) => { this.inputText = value; })
  • 触发时机:输入框内容发生任何变化时(键盘输入、粘贴、剪切等)
  • 回调参数:value为当前输入框的完整文本内容
  • 核心作用:实现输入内容与响应式变量的双向绑定,变量更新同步至其他关联组件

2. 编辑状态事件

.onEditChange((isEditing) => { console.info("是否正在编辑:", isEditing); })
  • 触发时机:输入框进入编辑态(获取焦点)或退出编辑态(失去焦点)时
  • 回调参数:isEditing为布尔值,true表示正在编辑,false表示退出编辑
  • 适用场景:根据编辑状态调整界面样式、触发数据验证等

3. 文本选中事件

.onTextSelectionChange((start, end) => { console.info("选中范围:", start, "-", end); })
  • 触发时机:用户在输入框中选中部分文本时
  • 回调参数:start为选中文本的起始索引,end为选中文本的结束索引
  • 适用场景:实现选中文本的复制、剪切、替换等自定义操作

4. 剪贴板操作事件

覆盖复制、剪切、粘贴三大剪贴板操作,可监听操作的文本内容,实现自定义剪贴板逻辑:

// 复制事件:用户复制选中文本时触发 .onCopy((value) => console.info("复制内容:", value)) // 剪切事件:用户剪切选中文本时触发 .onCut((value) => console.info("剪切内容:", value)) // 粘贴事件:用户向输入框粘贴文本时触发 .onPaste((value) => console.info("粘贴内容:", value))
  • 回调参数:value为当前操作的文本内容
  • 适用场景:剪贴板内容校验、日志记录、自定义粘贴格式处理等

组件运行效果

  1. 初始加载:输入框显示浅灰色占位符文本,无输入内容,右下角显示0/100字数计数器,整体为浅灰色背景、圆角边框样式;
  2. 输入操作:点击输入框获取焦点,显示蓝色光标,可输入字母、数字、中文和空格,非法字符被自动过滤,计数器实时更新;
  3. 阈值提醒:输入字符数达到80(80%阈值)时,计数器样式变化,提醒即将超限;
  4. 超限限制:输入字符数达到100时,禁止继续输入,输入框边框高亮,计数器显示100/100
  5. 行数控制:输入内容超过5行时,输入框出现滚动条,可上下滑动查看全部内容,输入框高度保持不变;
  6. 交互操作:支持选中文本进行复制、剪切、粘贴,相关操作日志实时打印;输入框失去焦点时,退出编辑态,控制台打印编辑状态变化;
  7. 关联展示:输入框下方的文本组件实时显示当前输入字符数,与输入框计数器保持同步。

官方API扩展属性

扩展属性官方API说明使用示例适用场景
disabled设置输入框是否禁用.disabled(false)表单未满足前置条件时,禁用输入框
editable设置输入框是否可编辑.editable(true)需展示文本但禁止编辑的场景(如详情页)
scrollbar设置滚动条样式.scrollbar(BarStyle.Default)自定义滚动条显示/隐藏状态
lineHeight设置输入文本行间距.lineHeight(24)多行文本时提升可读性
fontStyle设置输入文本样式.fontStyle(FontStyle.Italic)特殊场景下的文本样式定制

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力

http://www.jsqmd.com/news/684808/

相关文章:

  • 我开起来已经是一个全栈开发者
  • 别再手动建模了!3DMAX 2011+ 用户必看:这个螺母螺栓插件,5分钟搞定标准件
  • 超越Pandas:7种高效大数据处理技术对比
  • 基于vue的宏图企业档案资料管理系统[vue]-计算机毕业设计源码+LW文档
  • Go语言怎么做秒杀系统_Go语言秒杀系统实战教程【实用】
  • 为什么你的docker logs命令永远返回空?底层日志驱动架构解密(含containerd+systemd-journald双模式对照表)
  • COMSOL多孔介质流燃烧器模型:四场耦合,多物理场涉及非等温反应流场模拟
  • Qwen3-4B-Thinking真实对话效果:多轮逻辑追问+自我修正能力演示
  • 5分钟掌握KeymouseGo:零编程实现鼠标键盘自动化操作
  • Docker容器在麒麟V10上启动失败?3个内核参数+2个SELinux策略彻底解决国产OS兼容性问题
  • HPH精密构造:三大系统全解析
  • AT32F435 QSPI驱动W25N01G NAND Flash避坑指南:从引脚配置到读写验证的完整流程
  • mysql日志记录开销_InnoDB重做日志对性能的影响
  • 2026乐山口碑装修公司选型全攻略 技术维度深度拆解 - 优质品牌商家
  • 人体活动识别技术:从传感器数据到智能应用
  • Panthor开源驱动实现OpenGL ES 3.1认证的技术突破
  • 基于scikit-learn的手势识别系统开发实践
  • 【企业级Docker沙箱落地白皮书】:从DevSecOps流水线到GDPR合规沙箱的12项硬核检查清单
  • 为什么你的EF Core 10向量查询比原生SQL慢47倍?——基于IL重写与Span<T>向量化执行的底层优化白皮书
  • Go语言怎么写注释_Go语言代码注释规范教程【通俗】
  • Phi-3.5-mini-instruct基础教程:多语言对话与代码生成能力验证
  • 量子计算噪声抑制与误差缓解技术解析
  • 【数组结构与算法分析】一篇搞懂:栈与队列的底层实现原理与接口体系
  • NVIDIA Parabricks v4.2:GPU加速基因组分析技术解析
  • 从Wurth和Vishay的Datasheet差异说起:实战解析功率电感饱和电流的‘文字游戏’
  • SHAP原理与实战:树模型可解释性指南
  • 八大网盘直链解析工具:LinkSwift让文件下载速度飙升的终极解决方案
  • GAN模型解析:从基础原理到实战应用
  • 【收藏备用】2026年AI人才市场需求爆发,企业更看重实践能力而非学历(小白/程序员必看大模型学习指南)
  • 量子中间表示(QIR)与脉冲控制技术解析