仿京东短信验证码UI效果(鸿蒙)
整体思路:
外层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效果(鸿蒙)的更多相关文章
- Android Studio精彩案例(五)《JSMS短信验证码功能实现》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用.那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能 ...
- iOS点击获取短信验证码按钮
概述 iOS点击获取短信验证码按钮, 由于 Demo整体测试运行效果 , 整个修改密码界面都已展现, 并附送正则表达式及修改密码逻辑. 详细 代码下载:http://www.demodashi.com ...
- Atitit. 破解 拦截 绕过 网站 手机 短信 验证码 方式 v2 attilax 总结
Atitit. 破解 拦截 绕过 网站 手机 短信 验证码 方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码 用户操作 ,比如 ...
- Android学习笔记之短信验证码的获取和读取
PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...
- atitit.短信 验证码 破解 v3 p34 识别 绕过 系统方案规划----业务相关方案 手机验证码 .doc
atitit.短信 验证码 破解 v3 p34 识别 绕过 系统方案规划----业务相关方案 手机验证码 .doc 1. 手机短信验证码 vs 图片验证码 安全性(破解成本)确实要高一些1 1 ...
- springboot +spring security4 自定义手机号码+短信验证码登录
spring security 默认登录方式都是用户名+密码登录,项目中使用手机+ 短信验证码登录, 没办法,只能实现修改: 需要修改的地方: 1 .自定义 AuthenticationProvide ...
- 这是一个简单的前台短信验证码功能 ajax实现异步处理 (发送和校验)
<script type="text/javascript"> var InterValObj; //timer变量,控制时间 var count = 60; //间隔 ...
- 四:java调接口实现发送手机短信验证码功能
1.点击获取验证码之前的样式: 2.输入正确的手机号后点击获取验证码之后的样式: 3.如果手机号已经被注册的样式: 4.如果一个手机号一天发送超过3次就提示不能发送: 二:前台的注册页面的代码:reg ...
- 【安全测试】如何利用短信验证码BUG浪费公司的钱
一.背景 公司新产品体验,发现不少交互.UI.功能设计上的小问题.于是花了点时间随意挑了几个功能深入的玩了一下,顺手提了BUG.接口层,看了一下接口文档,简单测了一下接口,BUG其实还挺严重的,后面详 ...
- 『实践』Android之短信验证码(用的Mob短信验证)
1.参考资料 Mob网站:http://www.mob.com/ Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android 教程:htt ...
随机推荐
- 07C++选择结构(1)——教学
一.基础知识 1.关系运算符 因为我们要对条件进行判断,必然会用到关系运算符: 名称 大于 大于等于 小于 小于等于 等于 不等于 符号 > >= < <= == != 关系表 ...
- 禅道bug增加自定义字段
禅道版本 18.9 需求 给禅道的bug模块,增加自定义字段. 目前主要增加"发现阶段"."所属环境"."出现频率" 增加bug的类型 在b ...
- Netty有关
https://www.baeldung.com/tag/netty/ https://github.com/eugenp/tutorials https://stackoverflow.com/qu ...
- Qt编写地图综合应用37-覆盖物多边形
一.前言 多边形主要的应用场景是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县市区域多边形,然后找到这个县市对应的所有站点,拿到这些站点在做其他处理. 二.功能特点 同 ...
- 不为人知的网络编程(十四):拔掉网线再插上,TCP连接还在吗?一文即懂!
本文由作者小林coding分享,来自公号"小林coding",有修订和改动. 1.引言 说到TCP协议,对于从事即时通讯/IM这方面应用的开发者们来说,再熟悉不过了.随着对TCP理 ...
- Pytorch Layer层总结
卷积层 nn.Conv1d 对由多个输入平面组成的输入信号应用一维卷积. nn.Conv2d 在由多个输入平面组成的输入信号上应用 2D 卷积. nn.Conv3d 对由多个输入平面组成的输入信号应用 ...
- Python_图片对比问题汇总
问题一. raise OSError(f"cannot write mode {im.mode} as JPEG") from eOSError: cannot write mod ...
- Solution Set -「NOIP Simu.」20221014
\(\mathscr{A}\sim\)「Unknown」tothecrazyones 有 \(n\) 堆石子, 第 \(i\) 堆有 \(a_i\) 个. Alice 和 Bob 轮流抓取, Al ...
- SpringBoot(九) - Swagger
1.依赖 <!-- swagger 核心 --> <dependency> <groupId>io.springfox</groupId> <ar ...
- w3cschool-MyBatis-Plus 插件
https://www.w3cschool.cn/mybatis_plus/mybatis_plus-udwn3mgc.html MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具 ...