HarmonyOS 鸿蒙Next 自定义组件如交易密码输入如何实现在业务需要时弹出覆盖在其他page页面上 在不需要时从当前page移除

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 自定义组件如交易密码输入如何实现在业务需要时弹出覆盖在其他page页面上 在不需要时从当前page移除 我有一个自定义的业务组件,我需要在用户即将输入短信或者输入金额的时候提起这个自定义的组件,将当前自定义组件添加到当前的page,不需要的时候进行移除,类似于安卓中我讲一个自定义视图添加到window,然后不需要的时候从window移除。

2 回复

显隐控制-通用属性-组件通用信息-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者 (huawei.com)

如果是想实现自定义键盘的效果,可以参考demo

// xxx.ets
@Entry
@Component
struct TextAreaExample {
  controller: TextAreaController = new TextAreaController()
  @State inputValue: string = ""

  // 自定义键盘组件
  @Builder CustomKeyboardBuilder() {
    Column() {
      Button('x').onClick(() => {
        // 关闭自定义键盘
        this.controller.stopEditing()
      })
      Grid() {
        ForEach([1, 5, 3,8 ,9, 6, 2, 4,7 , '*', 0, '#'], (item: number | string) => {
          GridItem() {
            Button(item + "").width(110).onClick(() => {
              this.inputValue += item
            })
          }
        }).maxCount(3).columnsGap(10).rowsGap(10).padding(5)
      }.backgroundColor(Color.Gray)
    }
  }

  build() {
    Column() {
      TextArea({ controller: this.controller, text: this.inputValue})
        // 绑定自定义键盘
        .customKeyboard(this.CustomKeyboardBuilder()).margin(10).border({ width: 1 })
        .height(200)
    }
  }
}

如果是自定义弹出和关闭视图动画,可以参考demo:

@Entry
@Component
struct CustomDialogUser {
  @State isAutoCancel: boolean = true;
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({ isAutoCancel: this.isAutoCancel }),
    autoCancel: this.isAutoCancel,
    customStyle: true
  })

  build() {
    Column() {
      Button('click me')
        .onClick(() => {
          this.dialogController.open()
        })
    }.width('100%')
    .height('100%')
    .onClick(() => {
    })
  }
}

// 弹窗交互
@CustomDialog
struct CustomDialogExample {
  controller: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({}),
    autoCancel: false
  })
  @State showFlag: Visibility = Visibility.Visible;
  @State isAutoCancel: boolean = false;
  textController: TextAreaController = new TextAreaController()

  build() {
    Column() {
      Row() {
        TextArea({ controller: this.textController })
          .fontSize(20)
      }
      .padding(8)
      .backgroundColor('#FFFFFF')
      .height(200)
      .margin({ bottom: -5 })
      .width('100%')
    }
    .justifyContent(FlexAlign.End)
    .width('100%')
    .height('100%')
    .margin({
      bottom: -15
    })
    .onClick(() => {
      console.log('dialogClick')
      if (this.isAutoCancel) {
        console.log('dialogClick2')
        this.cancel();
      }
    })
    .visibility(this.showFlag)
    .transition(TransitionEffect.OPACITY.animation({ duration: 250 })
      .combine(TransitionEffect.translate({ y: 100 })))
  }

  cancel() {
    this.showFlag = Visibility.Hidden
    console.log('closeDialog')
    setTimeout(() => {
      this.controller.close()
    }, 250)
  }
}

更多关于HarmonyOS 鸿蒙Next 自定义组件如交易密码输入如何实现在业务需要时弹出覆盖在其他page页面上 在不需要时从当前page移除的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,自定义组件如交易密码输入的实现,可以通过Service Ability和Page Ability的结合来完成。具体实现步骤如下:

  1. 创建自定义组件:首先,需要创建一个自定义的Dialog或Popup组件,用于输入密码的界面。这个组件可以包含必要的输入框和按钮等UI元素。

  2. Service Ability管理:使用Service Ability来管理这个自定义组件的显示和隐藏。Service Ability可以在后台运行,不受Page Ability生命周期的限制,因此适合用于管理需要在多个Page之间共享或跨Page显示的UI元素。

  3. Page Ability调用:在需要显示密码输入界面的Page Ability中,通过绑定Service Ability并调用其接口来显示自定义组件。同样地,在不需要时,也可以通过调用Service Ability的接口来隐藏或移除该组件。

  4. 确保组件的正确显示和隐藏:在Service Ability中,需要处理组件的显示逻辑,确保它在正确的时机覆盖在其他Page页面上,并在不需要时从当前Page移除。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部