HarmonyOS--自定义弹窗(CustomDialog)

概要

  自定义弹窗是指在网页或移动应用程序中,用户与应用程序进行交互时弹出的一个窗口。弹窗可以用来展示重要信息、获取用户确认或提供额外的操作选项。与默认的弹窗样式相比,自定义弹窗可以更加灵活、个性化地设计,以满足应用程序的特定需求。


整体架构流程

1.用@CustomDialog装饰器装饰自定义弹框(自定义弹窗的内容)

struct CustomDialogExample {
  controller: CustomDialogController
  build() {
    Column() {
      Text('请打开正版原神')
       ...
    }
  }
}

2.创建构造器,与装饰器呼应相连

dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({
 ...
  }),

})

3.与onClick事件绑定的组件使弹窗弹出

Flex({justifyContent:FlexAlign.Center}){
  Button('原神,启动!')
    .onClick(() => {
      this.dialogController.open()
    })
}.width('100%')

4.在@CustomDialog装饰器内添加按钮操作,同时添加数据函数的创建

@Component
@CustomDialog
struct CustomDialogExample {
  controller: CustomDialogController
  cancel: () => void
  confirm: () => void
  build() {
    Column() {
      Text('请打开正版原神').fontSize(20).margin({ top: 10, bottom: 10 })

      Flex({ justifyContent: FlexAlign.SpaceAround}) {

        Button('取消')
          .onClick(() => {
            this.controller.close()
            this.cancel()
          }).backgroundColor(0xffffff).fontColor(Color.Black)

        Button('确定')
          .onClick(() => {
            this.controller.close()
            this.confirm()
          }).backgroundColor(0xffffff).fontColor(Color.Red)
      }.margin({ bottom: 10 })
    }
  }
}

5.在构造器内进行接收,同时创建相应的函数操作

@Entry
@Component
struct DialogExample {
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({
      cancel: this.onCancel,
      confirm: this.onAccept,
    }),
    alignment: DialogAlignment.Default, 
  })
  onCancel() {
    console.info('点击按钮启动!')
  }
  onAccept() {
    console.info('取消启动')
  }

  build() {
    Flex({ justifyContent: FlexAlign.Center }) {
      Button('原神,启动!')
        .onClick(() => {
          this.dialogController.open()
        })
    }.width('100%')
  }
}

整个代码片段以及代码解释

@Component
@CustomDialog   //装饰器,用来装饰自定义弹窗
struct CustomDialogExample {
  controller: CustomDialogController
  cancel: () => void  
  confirm: () => void  // 按键
  build() {
    Column() {
      Text('请打开正版原神').fontSize(20).margin({ top: 10, bottom: 10 })  
           //用来书写弹窗上的内容

      Flex({ justifyContent: FlexAlign.SpaceAround})  //指弹窗的格式,
也可以自定义
 {

        Button('取消')  //弹窗按钮
          .onClick(() => {
            this.controller.close()
            this.cancel()
          }).backgroundColor(0xffffff).fontColor(Color.Black)

        Button('确定')
          .onClick(() => {
            this.controller.close()
            this.confirm()
          }).backgroundColor(0xffffff).fontColor(Color.Red)
      }.margin({ bottom: 10 })
    }
  }
}

@Entry
@Component
struct DialogExample {
  dialogController: CustomDialogController = new CustomDialogController({  //用来接收上方内容
    builder: CustomDialogExample({
      cancel: this.onCancel,
      confirm: this.onAccept,
    }),

    alignment: DialogAlignment.Default,  
//可设置dialog的对齐方式,设定显示在底部或中间等,默认为底部显示

  })  //构造器,与上方装饰器呼应!
  onCancel() {
    console.info('点击按钮启动!')
  }
  onAccept() {
    console.info('取消启动')
  }

  build() {
    Flex({ justifyContent: FlexAlign.Center }) {   //弹窗弹出
Button('原神,启动!')
        .onClick(() => {
          this.dialogController.open()
        })
    }.width('100%')
  }
}


技术细节

1.注意使用@CustomDialog装饰器装饰自定义弹窗。

2.装饰器和构造器的呼应关系


小结

  • 22
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值