整体思路:

外层Stack布局,里面TextInput组件用来调起键盘,Row布局中循环出四个Text组件,Row布局覆盖在TextInput组件上,用来展示输入的数字。



定义两个参数,code用来接受输入的文本,someArray用来做为想要展示的Text组件数量,其中的数字用来和code的长度做比较,来区分输入框是否写入文本。

  @State code: string = ''
someArray: number[] = [1, 2, 3, 4]

这里循环someArray,Text组件未填入时显示 ‘-’并且即将写入数字的Text组件有橙色高亮,当四个输入框都有数字时,最后一个框高亮。

      Row() {
ForEach(this.someArray, (item: number, index: number) => {
if (item != 1) {
Blank() // 除了第一个TextView自定义组件以外,其他三个的左边都添加一个Blank()组件
}
if (this.code.length >= item) {
// 填过数字的输入框才满足这个条件, 且只有填到最后一个数字的时候isBorder才为true
this.codeOne({ code: this.code.substring(item - 1, item), isBorder: item == 4 })
} else {
// 未填数字的输入框,显示'-',并且即将要输入的框为橙色
this.codeOne({ code: '-', isBorder: this.code.length + 1 == item })
}
}, (item: number) => JSON.stringify(item))
}
.hitTestBehavior(HitTestMode.Transparent)
.zIndex(2)
.padding({ left: 16, right: 16 })
.width('100%')
  @Builder
codeOne($$: SMSInfo) {
Text($$.code)
.textAlign(TextAlign.Center)
.width(60)
.height(60)
.border({ radius: 11, width: 3 })
.borderColor($$.isBorder ? '#FF5500' : Color.Transparent)
.backgroundColor('#F3F5F7')
}

难点:需要事件透传,在Row布局上设置.hitTestBehavior(HitTestMode.Transparent),hitTestBehavior自身和子节点都响应触摸测试,不会阻塞兄弟节点的触摸测试。不会影响祖先节点的触摸测试。

完整代码:

import { promptAction } from "@kit.ArkUI"

@Entry
@Component
export struct SMSCaptchaPage {
@State code: string = ''
someArray: number[] = [1, 2, 3, 4] build() {
Stack() {
Row() {
ForEach(this.someArray, (item: number, index: number) => {
if (item != 1) {
Blank() // 除了第一个TextView自定义组件以外,其他三个的左边都添加一个Blank()组件
}
if (this.code.length >= item) {
// 填过数字的输入框才满足这个条件, 且只有填到最后一个数字的时候isBorder才为true
this.codeOne({ code: this.code.substring(item - 1, item), isBorder: item == 4 })
} else {
// 未填数字的输入框,显示'-',并且即将要输入的框为橙色
this.codeOne({ code: '-', isBorder: this.code.length + 1 == item })
}
}, (item: number) => JSON.stringify(item))
}
.hitTestBehavior(HitTestMode.Transparent)
.zIndex(2)
.padding({ left: 16, right: 16 })
.width('100%') TextInput()
.width('100%')
.height(50)
.maxLength(4)
.type(InputType.Number)
.backgroundColor(Color.Transparent)
.onChange((value: string) => {
this.code = value // 输入的内容改变时, 实时的传给code
if (value.length == 4) {
promptAction.showToast({ message: '验证码输入成功,等待验证' })
}
})
}
.width('100%')
.height('100%')
} @Builder
codeOne($$: SMSInfo) {
Text($$.code)
.textAlign(TextAlign.Center)
.width(60)
.height(60)
.border({ radius: 11, width: 3 })
.borderColor($$.isBorder ? '#FF5500' : Color.Transparent)
.backgroundColor('#F3F5F7')
}
} class SMSInfo {
code: string = ''
isBorder: boolean = false
}

仿京东短信验证码UI效果(鸿蒙)的更多相关文章

  1. Android Studio精彩案例(五)《JSMS短信验证码功能实现》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用.那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能 ...

  2. iOS点击获取短信验证码按钮

    概述 iOS点击获取短信验证码按钮, 由于 Demo整体测试运行效果 , 整个修改密码界面都已展现, 并附送正则表达式及修改密码逻辑. 详细 代码下载:http://www.demodashi.com ...

  3. Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结

    Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如 ...

  4. Android学习笔记之短信验证码的获取和读取

    PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...

  5. atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc

    atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc 1. 手机短信验证码 vs 图片验证码 安全性(破解成本)确实要高一些1 1 ...

  6. springboot +spring security4 自定义手机号码+短信验证码登录

    spring security 默认登录方式都是用户名+密码登录,项目中使用手机+ 短信验证码登录, 没办法,只能实现修改: 需要修改的地方: 1 .自定义 AuthenticationProvide ...

  7. 这是一个简单的前台短信验证码功能 ajax实现异步处理 (发送和校验)

    <script type="text/javascript"> var InterValObj; //timer变量,控制时间 var count = 60; //间隔 ...

  8. 四:java调接口实现发送手机短信验证码功能

    1.点击获取验证码之前的样式: 2.输入正确的手机号后点击获取验证码之后的样式: 3.如果手机号已经被注册的样式: 4.如果一个手机号一天发送超过3次就提示不能发送: 二:前台的注册页面的代码:reg ...

  9. 【安全测试】如何利用短信验证码BUG浪费公司的钱

    一.背景 公司新产品体验,发现不少交互.UI.功能设计上的小问题.于是花了点时间随意挑了几个功能深入的玩了一下,顺手提了BUG.接口层,看了一下接口文档,简单测了一下接口,BUG其实还挺严重的,后面详 ...

  10. 『实践』Android之短信验证码(用的Mob短信验证)

    1.参考资料 Mob网站:http://www.mob.com/ Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android 教程:htt ...

随机推荐

  1. [OS] 计算机资源虚拟化技术

    1 定义:计算机资源虚拟化 服务器虚拟化主要通过软件技术将物理服务器的硬件资源抽象化,创建多个独立的虚拟服务器环境. 2 虚拟化技术方向 以下是一些常见的服务器虚拟化方式和工具: 基于hypervis ...

  2. R数据分析:非劣效性研究设计的统计处理方法,原理和实例

    在我们经常接触的统计模式中,我们是在寻求推翻原假设,证明差异,这种统计模型在传统的临床试验中,在各种统计推断中已经成为默认了.在传统的临床试验中通常会将一种新的治疗方法与标准治疗或安慰剂进行比较,从而 ...

  3. 给我2分钟,保证教会你在Vue3中实现一个定高的虚拟列表

    前言 虚拟列表对于大部分一线开发同学来说是一点都不陌生的东西了,有的同学是直接使用第三方组件.但是面试时如果你简历上面写了虚拟列表,却给面试官说是通过三方组件实现的,此时空气可能都凝固了.所以这篇文章 ...

  4. 古早的遗传算法碰到LLM->😊AutoDAN Generating Stealthy Jailbreak Prompts on💗Aligned Large Language Models

    师兄推给我的一篇ICLR,抽出时间阅读整理了附录前的内容 这次没有完全翻译,因为我想组会上分享,转成自己的话 禁止盗用,侵权必究!!!欢迎大家积极举报

  5. 展锐SE8451E 开启硬件流控

    Dear Customer:  如电话沟通,若将uart0配置成3M波特率,需进行如下更改:  1.时钟源更改为96M/sprdroid10_trunk_19c_rls1/bsp/kernel/ker ...

  6. Solution Set - “说选个晴日,露能滴出彩虹”

    目录 0.「BZOJ #3457」Ring 1.「CF 1824C」LuoTianyi and XOR-Tree 2.「CF 1824D」LuoTianyi and the Function 3.「C ...

  7. ElasticSearch架构及详解

    1. 图解es内部机制 1.1. 图解es分布式基础 1.1.1es对复杂分布式机制的透明隐藏特性 分布式机制:分布式数据存储及共享. 分片机制:数据存储到哪个分片,副本数据写入. 集群发现机制:cl ...

  8. biancheng-MongoDB教程

    目录http://c.biancheng.net/mongodb2/ 1NoSQL是什么2MongoDB是什么3Windows安装MongoDB4Linux安装MongoDB5MacOS安装Mongo ...

  9. w3cschool-Python3 教程

    https://www.w3cschool.cn/python3/ Python 特点 1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单. 2.易于阅读: ...

  10. C# Linq 去重

    static void Main(string[] args) { var list = new List<roleJson>() { new roleJson(){ Id=1,RoleN ...