1024

38、鸿蒙/组件/自定义弹窗 (CustomDialog)

2024-07-29  本文已影响0人  圆梦人生

CustomDialog是自定义弹窗,可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗

创建自定义弹窗

// 定义自定义弹框
@CustomDialog
export struct CustomDialogCmp {
  controll: CustomDialogController = new CustomDialogController({
    builder: CustomDialogCmp({})
  })
  //
  build() {
    Column(){
      Text('弹框内容区域').fontSize(20).padding(20)
    }
  }
}
//
import { CustomDialogCmp } from './cmp/CustomDialogCmp'
//
// @Entry
@Component
export struct CustomDialog {
  //
  dialog: CustomDialogController = new CustomDialogController({
    builder: CustomDialogCmp()
  })
  //
  build() {
    Column(){
      Button('点击显示弹框').onClick(e=>{
        this.dialog.open();
      })
    }
  }
}

CustomDialog.png

弹窗的交互

弹窗可用于数据交互,完成用户一系列响应操作。

// 定义自定义弹框
@CustomDialog
export struct CustomDialogCmp {
  cancel?: () => void
  confirm?: () => void
  //
  controll: CustomDialogController = new CustomDialogController({
    builder: CustomDialogCmp({})
  })
  //
  build() {
    Column(){
      Text('弹框内容区域').fontSize(20).padding(20)
      Flex({ justifyContent: FlexAlign.SpaceAround }){
        Button('取消').onClick(() => {
            this.controll.close()
            if (this.cancel) {
              this.cancel()
            }
          }).backgroundColor(0xffffff).fontColor(Color.Black);
        Button('确定')
          .onClick(() => {
            this.controll.close()
            if (this.confirm) {
              this.confirm()
            }
          }).backgroundColor(0xffffff).fontColor(Color.Red)
      }.padding(20)
    }
  }
}
//
import { CustomDialogCmp } from './cmp/CustomDialogCmp'
//
// @Entry
@Component
export struct CustomDialog {
  //
  dialog: CustomDialogController = new CustomDialogController({
    builder: CustomDialogCmp({
      cancel: ()=>{ this.onCancel() },
      confirm: ()=>{ this.onAccept() }
    })
  });
  // 点击了取消
  onCancel(){
    console.log('点击了取消按钮');
  }
  // 点击了确定
  onAccept(){
    console.log('点击了确定按钮');
  }
  //
  build() {
    Column(){
      Button('点击显示弹框').onClick(e=>{
        this.dialog.open();
      })
    }
  }
}
CustomDialog.png

弹窗的动画

弹窗通过定义openAnimation控制弹窗出现动画的持续时间,速度等参数。

//
import { CustomDialogCmp } from './cmp/CustomDialogCmp'
@Component
export struct CustomDialog {
  //
  dialog: CustomDialogController = new CustomDialogController({
    builder: CustomDialogCmp({
      cancel: ()=>{ this.onCancel() },
      confirm: ()=>{ this.onAccept() }
    }),
    // 添加动画
    openAnimation: {
      duration: 1000,
      curve: Curve.Friction,
      delay: 500,
      playMode: PlayMode.Alternate,
      onFinish: () => {
        console.info('play end')
      }
    },
  });
  // 点击了取消
  onCancel(){
    console.log('点击了取消按钮');
  }
  // 点击了确定
  onAccept(){
    console.log('点击了确定按钮');
  }
  //
  build() {
    Column(){
      Button('点击显示弹框').onClick(e=>{
        this.dialog.open();
      })
    }
  }
}

弹窗的样式

弹窗通过定义宽度、高度、背景色、阴影等参数来控制样式。

//
import { CustomDialogCmp } from './cmp/CustomDialogCmp'
//
// @Entry
@Component
export struct CustomDialog {
  //
  dialog: CustomDialogController = new CustomDialogController({
    builder: CustomDialogCmp({
      cancel: ()=>{ this.onCancel() },
      confirm: ()=>{ this.onAccept() }
    }),
    // 添加动画
    openAnimation: {
      duration: 1000,
      curve: Curve.Friction,
      delay: 500,
      playMode: PlayMode.Alternate,
      onFinish: () => {
        console.info('play end')
      }
    },
    // 边框和阴影
    borderStyle: BorderStyle.Dashed,//使用borderStyle属性,需要和borderWidth属性一起使用
    borderColor: Color.Blue,//使用borderColor属性,需要和borderWidth属性一起使用
    shadow: ({ radius: 20, color: Color.Grey, offsetX: 50, offsetY: 0}),
  });
  // 点击了取消
  onCancel(){
    console.log('点击了取消按钮');
  }
  // 点击了确定
  onAccept(){
    console.log('点击了确定按钮');
  }
  //
  build() {
    Column(){
      Button('点击显示弹框').onClick(e=>{
        this.dialog.open();
      })
    }
  }
}
弹框边框.png
Button('点击').onClick(()=>{
  AlertDialog.show({
    title: '温馨提示',
    message: '点击了确认',
    confirm: {
      value: '确定',
      action: ()=>{
        console.log('点击了确认');
      }
     },
    cancel: ()=>{
       console.log('取消');
     }
  })
})
上一篇下一篇

猜你喜欢

热点阅读