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

【HarmonyOS NEXT】ArkUI实现「单格单字符+下划线」手机号/验证码输入框

一、背景

在开发鸿蒙登录/验证码页面时,需要实现「每个数字单独占一格、每格下方带下划线、输入框隐藏」的手机号或验证码输入效果。

最初我是打算用输入框TextInput+下划线Divider来实现这个效果的,但是无法实现「单格单字符+独立下划线」的视觉效果,最终采用以下的实现思路

需要实现的效果图:

二、实现思路

以11位手机号码为例:

1、UI视觉:通过ForEach循环渲染 11 个由Column包裹的 “Text+Divider” 组合,实现 单格数字+下划线的效果。

2、交互实现:隐藏的TextInput处理实际输入和数据绑定

3、点击控制:当点击输入数字时,通过focusControl将焦点传递给隐藏的TextInput,确保输入的连贯性

三、具体代码如下

以下代码可直接运行查看效果

@Entry @ComponentV2 struct Index { @Local phoneNumber: string = "" private inputKey: string = "mobileFocus" controller: TextInputController = new TextInputController() build() { Column() { Stack({ alignContent: Alignment.Center }) { // 1. 交互层:隐藏的TextInput(处理输入逻辑) TextInput({ text: this.phoneNumber, controller: this.controller }) .fontSize(16) .opacity(0) .type(InputType.Number) .height('auto') .key(this.inputKey) .textAlign(TextAlign.Center) .maxLength(11) .onChange((value) => { this.phoneNumber = value }) //2. UI层:TextAndLine组件(渲染11个格子) TextAndLine({ count: 11, chat: this.phoneNumber, textWidth: 20, dividerWidth: 24 }) } .margin({ top: 100 }) .onClick(() => { focusControl.requestFocus(this.inputKey) }) } .width('100%') .height('100%') .backgroundColor('#151617') } } @ComponentV2 export struct TextAndLine { @Param chat: string = "" @Param count: number = 11 @Param textWidth: number = 20 @Param dividerWidth: number = 24 private dataArray: string[] = new Array(this.count).fill(null) build() { Row({ space: 8 }) { ForEach(this.dataArray, (value: string, index: number) => { Column() { Text(this.getValue(index)) .width(this.textWidth) .height(44) .lineHeight(44) .fontColor('#CCFFFFFF') .fontSize(32) .textAlign(TextAlign.Center) Divider() .strokeWidth(1) .color('#99FFFFFF') .width(this.dividerWidth) }.justifyContent(FlexAlign.Center) }) } .width('auto') .height(60) .backgroundColor('#FF151617') } getValue(index: number): string { if (this.chat.length > index) { return this.chat[index].toString() } else { return " " } } }

四、实现效果

http://www.cnnetsun.cn/news/707188.html

相关文章:

  • 中小企业AI转型:麦橘超然低成本图像生成部署路径
  • 4款语音处理镜像精选:一键部署,10分钟全搞定不超5元
  • 同或门在热备切换系统中的关键作用:完整示例
  • DeepSeek-R1隐私保护方案:本地数据不上云的特殊部署
  • Paraformer语音识别全流程演示,附完整操作步骤
  • 开源轻量模型趋势分析:Hunyuan多语翻译落地实操指南
  • sam3提示词引导分割模型实战|高效提取图像掩码的Gradio方案
  • 联邦学习实践:分布式训练DamoFD模型的隐私保护方案
  • Z-Image-Turbo部署教程:Python调用文生图API,9步生成高质量图像
  • 如何验证GPU是否启用?cv_unet_image-matting加速检测方案
  • 看完就想试!IndexTTS-2-LLM打造的有声读物案例展示
  • 万物识别-中文-通用领域入门必看:镜像使用完整流程
  • Gradio界面打不开?Live Avatar常见问题全解答
  • 嵌入式系统中LCD1602液晶显示屏程序调度策略分析
  • RexUniNLU多任务优化:联合训练策略
  • FunASR + speech_ngram_lm_zh-cn 构建高精度中文ASR|附WebUI使用全指南
  • AI图片校正实战:基于预置镜像的快速开发
  • Speech Seaco Paraformer是否支持Ogg?小众格式兼容性测试报告
  • 从海淀三年级上试卷感受海淀小学教育
  • 5分钟部署FSMN-VAD离线语音检测,小白也能轻松上手
  • VibeThinker-1.5B-WEBUI多任务测试:能否胜任非编程类任务?
  • 高并发场景下Qwen3-4B-Instruct-2507稳定性测试报告
  • cv_resnet18加载模型报错?路径配置问题快速排查指南
  • DDColor模型选型指南:不同场景下的size参数优化
  • GPEN婚礼摄影后期案例:百张照片快速精修部署方案
  • 多场景AI应用落地实践:DeepSeek-R1在教育题解中的部署案例
  • 智能客服实战:用BGE-M3快速搭建多语言问答匹配系统
  • DeepSeek-R1多平台兼容性:Windows/Linux部署对比教程
  • Youtu-2B法律文书辅助:合同条款生成准确性验证
  • CPU模式运行DeepSeek-R1-Distill-Qwen-1.5B?低算力设备兼容方案