HarmonyOS 支付输入弹框

支付输入弹框

HarmonyOS
2024-12-20 17:03:50
1008浏览
收藏 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)
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
分享
微博
QQ
微信
回复
2024-12-20 19:16:09
相关问题
HarmonyOS 如何主动隐藏输入
814浏览 • 1回复 待解决
HarmonyOS PermissionDialog无法
682浏览 • 1回复 待解决
HarmonyOS CustomDialog报错
783浏览 • 1回复 待解决
HarmonyOS 隐私协议
703浏览 • 1回复 待解决
HarmonyOS 如何实现全局
920浏览 • 1回复 待解决
HarmonyOS 嵌套的实现
805浏览 • 1回复 待解决
HarmonyOS 应用级全局
1196浏览 • 1回复 待解决
HarmonyOS 密码输入
795浏览 • 1回复 待解决
HarmonyOS API调用与Dialog
1017浏览 • 0回复 待解决
HarmonyOS 通知授权无法弹出 -
1063浏览 • 1回复 待解决
获取输入输入的内容
483浏览 • 2回复 待解决
获取定位权限没有
2841浏览 • 1回复 待解决
代码获取后台权限?
4299浏览 • 1回复 待解决
HarmonyOS 输入只能输入字母和数字
1092浏览 • 1回复 待解决
HarmonyOS 适配-输入问题
835浏览 • 1回复 待解决
HarmonyOS 输入无法对齐
1152浏览 • 1回复 待解决
HarmonyOS 软键盘挤压Toast
552浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了1人