HarmonyOS 支付输入弹框

支付输入弹框

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

1、整体的实现考虑用CustomDialog来实现,因为支付是无光标,所以建议使用6个Text拼接实现,不需要使用TextInput,然后在点击自定义键盘时候,触发事件在Text显示,加密显示使用图片展示类似于*的效果参考以下实现方式:

@CustomDialog
  //弹窗装饰器,自定义弹窗
struct CustomDialogExample {
  controller: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({}),
  })
  services: Array<string> = ['1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', '0', 'X']
  numbers: Array<number> = [1, 2, 3, 4, 5, 6]
  @State Inputs: Array<string> = []

  build() { //设置弹窗内容
    Column() {
      Text('请输入支付密码')
        .fontSize(20)
        .margin({ top: 10, bottom: 10 })
      Row({ space: 5 }) {
        ForEach(this.numbers, (item: number) => {
          Text(this.Inputs.length >= item ? '*' : '')
            .width(20)
            .height(20)
            .backgroundColor('#C0C0C0')
            .textAlign(TextAlign.Center)
        })
      }
      .width('100%')
      .height('15%')
      .justifyContent(FlexAlign.Center)

      Grid() {
        ForEach(this.services, (service: string) => {
          GridItem() {
            Text(service)
          }
          .borderWidth(0.4)
          .borderColor(Color.Gray)
          .onClick(() => {
            if (service != 'X' && service != ' ') {
              this.Inputs.push(service)
              if (this.Inputs.length == 6) {
                this.controller.close()
              }
            }
            if (service == 'X') {
              this.Inputs.pop()
            }
          })
        })
      }
      .width('100%')
      .height('60%')
      .rowsTemplate('1fr 1fr 1fr 1fr')
      .columnsTemplate('1fr 1fr 1fr')
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.SpaceBetween)
  }
}

@Entry
@Component
struct Index {
  dialogController: CustomDialogController = new CustomDialogController({
    //弹窗构造器,与装饰器相呼应
    builder: CustomDialogExample(),
  })

  build() {
    Column() {
      Button('支付')
        .onClick(() => {
          this.dialogController.open()
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.SpaceAround)
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 如何主动隐藏输入
140浏览 • 1回复 待解决
HarmonyOS CustomDialog报错
43浏览 • 1回复 待解决
HarmonyOS 嵌套的实现
43浏览 • 1回复 待解决
HarmonyOS 应用级全局
327浏览 • 1回复 待解决
HarmonyOS API调用与Dialog
260浏览 • 0回复 待解决
HarmonyOS 输入无法对齐
386浏览 • 1回复 待解决
HarmonyOS 底部上滑的那种
33浏览 • 1回复 待解决
HarmonyOS 自定义组件问题
478浏览 • 1回复 待解决
HarmonyOS 自定义不能全屏
71浏览 • 1回复 待解决
HarmonyOS 如何做到页面在之上?
443浏览 • 1回复 待解决
代码获取后台权限?
3351浏览 • 1回复 待解决
获取定位权限没有
1919浏览 • 1回复 待解决
HarmonyOS 监听输入删除键
207浏览 • 1回复 待解决
HarmonyOS 输入不显示内容
54浏览 • 1回复 待解决
HarmonyOS Dialog的生命周期问题
585浏览 • 1回复 待解决
如何给自定义加上圆角背景
2083浏览 • 1回复 待解决