首页 > 其他分享 >学习笔记(二十八):ArkUi-自定义弹窗 (CustomDialog)

学习笔记(二十八):ArkUi-自定义弹窗 (CustomDialog)

时间:2024-11-06 22:08:59浏览次数:1  
标签:自定义 弹框 100% height CustomDialog CustomDialogController ArkUi MyCustomerDialog

概述:

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

一、创建自定义弹框

1、使用@CustomDialog装饰器装饰自定义弹窗,可在此装饰器内自定义弹窗内容

// 自定义弹框内容
@CustomDialog
struct MyCustomerDialog{
  controller: CustomDialogController = new CustomDialogController({
    builder: MyCustomerDialog({})
  })
  build(){
    Text('这是内容')
      .height(40)
  }
}

2、创建构造器,与装饰器呼应相连,并实现onClick事件绑定的组件使弹窗弹出

@Entry
@Component
struct CustomerDIalogExample {
  controller: CustomDialogController = new CustomDialogController({
    builder: MyCustomerDialog()
  })
  build() {
    Row() {
      Column() {
        Button('显示弹框')
          .onClick(()=>{
              this.controller.open()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

 1 // 自定义弹框使用示例
 2 @Entry
 3 @Component
 4 struct CustomerDIalogExample {
 5   controller: CustomDialogController = new CustomDialogController({
 6     builder: MyCustomerDialog()
 7   })
 8   build() {
 9     Row() {
10       Column() {
11         Button('显示弹框')
12           .onClick(()=>{
13               this.controller.open()
14           })
15       }
16       .width('100%')
17     }
18     .height('100%')
19   }
20 }
21 
22 // 自定义弹框内容
23 @CustomDialog
24 struct MyCustomerDialog{
25   controller: CustomDialogController = new CustomDialogController({
26     builder: MyCustomerDialog({})
27   })
28   build(){
29     Text('这是内容')
30       .height(40)
31   }
32 }
完整代码

 

 

二、弹窗数据交互

1、在@CustomDialog装饰器内添加按钮,同时添加数据函数

// 自定义弹框内容
@CustomDialog
struct MyCustomerDialog {
  @State title:string = "提示"  // 标题
  @State message:string = "";   // 提示内容
  cancel?:()=>void   // 取消事件
  confirm?:()=>void   // 确定事件
  controller: CustomDialogController = new CustomDialogController({
    builder: MyCustomerDialog({})
  })

  build() {
    Column() {
      Text(this.title)
        .width('100%')
        .height(40)
        .textAlign(TextAlign.Center)
        .fontColor(Color.White)
        .backgroundColor($r('app.color.dialog_title_bg'))
      Text(this.message)
        .height(70)
        .width('100%')
        .textAlign(TextAlign.Center)
      Row() {
        Button('取消')
          .layoutWeight(1)
          .backgroundColor(Color.White)
          .fontColor(Color.Black)
          .type(ButtonType.Normal)
          .height(40)
          .onClick(()=>this.cancel())
        Button('确定')
          .layoutWeight(1)
          .type(ButtonType.Normal)
          .backgroundColor($r('app.color.main_color'))
          .fontColor(Color.White)
          .height(40)
          .onClick(()=>this.confirm())
      }
      .width('100%')
    }
  }
}

 

2、页面内需要在构造器内进行接收,同时创建相应的函数操作

// 自定义弹框使用示例
@Entry
@Component
struct CustomerDIalogExample {
  controller: CustomDialogController = new CustomDialogController({
    builder: MyCustomerDialog({
      title:'警告',
      message: '是否退出',
      cancel:()=>{
        this.cancelEvent()
      },
      confirm:()=>{
        this.confirmEvent()
      }
    })
  })

  cancelEvent(){
    console.log('点击了取消')
  }
  confirmEvent(){
    console.log('点击了确定')
  }

  build() {
    Row() {
      Column() {
        Button('显示弹框')
          .onClick(() => {
            this.controller.open()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

 1 // 自定义弹框使用示例
 2 @Entry
 3 @Component
 4 struct CustomerDIalogExample {
 5   controller: CustomDialogController = new CustomDialogController({
 6     builder: MyCustomerDialog({
 7       title:'警告',
 8       message: '是否退出',
 9       cancel:()=>{
10         this.cancelEvent()
11       },
12       confirm:()=>{
13         this.confirmEvent()
14       }
15     })
16   })
17 
18   cancelEvent(){
19     console.log('点击了取消')
20   }
21   confirmEvent(){
22     console.log('点击了确定')
23   }
24 
25   build() {
26     Row() {
27       Column() {
28         Button('显示弹框')
29           .onClick(() => {
30             this.controller.open()
31           })
32       }
33       .width('100%')
34     }
35     .height('100%')
36   }
37 }
38 
39 // 自定义弹框内容
40 @CustomDialog
41 struct MyCustomerDialog {
42   @State title:string = "提示"  // 标题
43   @State message:string = "";   // 提示内容
44   cancel?:()=>void   // 取消事件
45   confirm?:()=>void   // 确定事件
46   controller: CustomDialogController = new CustomDialogController({
47     builder: MyCustomerDialog({})
48   })
49 
50   build() {
51     Column() {
52       Text(this.title)
53         .width('100%')
54         .height(40)
55         .textAlign(TextAlign.Center)
56         .fontColor(Color.White)
57         .backgroundColor($r('app.color.dialog_title_bg'))
58       Text(this.message)
59         .height(70)
60         .width('100%')
61         .textAlign(TextAlign.Center)
62       Row() {
63         Button('取消')
64           .layoutWeight(1)
65           .backgroundColor(Color.White)
66           .fontColor(Color.Black)
67           .type(ButtonType.Normal)
68           .height(40)
69           .onClick(()=>this.cancel())
70         Button('确定')
71           .layoutWeight(1)
72           .type(ButtonType.Normal)
73           .backgroundColor($r('app.color.main_color'))
74           .fontColor(Color.White)
75           .height(40)
76           .onClick(()=>this.confirm())
77       }
78       .width('100%')
79     }
80   }
81 }
完整代码

  

标签:自定义,弹框,100%,height,CustomDialog,CustomDialogController,ArkUi,MyCustomerDialog
From: https://www.cnblogs.com/xqxacm/p/18530712

相关文章

  • Jest进阶知识:深入测试 React Hooks-确保自定义逻辑的可靠性
    测试ReactHooks在React开发中,Hooks是一个非常重要的功能模块,允许开发者在函数组件中使用状态和其他React特性。自定义Hooks作为一种公共逻辑的抽离,经常被多个组件复用,因此对其测试是非常必要的。然而,由于Hooks必须在组件内部使用,直接测试它们并不像普通函数那......
  • 学习笔记(二十七):ArkUi-警告弹窗(AlertDialog)
    概述:警告弹窗,需要向用户提问或得到用户的许可。警告弹窗用来提示重要信息,但会中断当前任务,尽量提供必要的信息和有用的操作。避免仅使用警告弹窗提供信息,用户不喜欢被信息丰富但不可操作的警告打断。必选内容包含:标题、可选信息文本、最多3个按钮。可选内容包含:输入框、icon......
  • arkUI:Column和Rom的间距设置(列向,横向)
    arkUI:Column和Rom的间距设置(列向,横向)1主要内容说明2相关内容举例和说明2.1Column的间距(列的间距)2.1.1源码1(Column的间距)2.1.2源码1运行效果2.2Row的间距(横向间距)2.2.1源码2(Row的间距)3.结语4.定位日期1主要内容说明Column:垂直布局组件,子组件从上到下依次......
  • netdxf中创建一个新的自定义视图
    需求是我想使用netdxf创建一个文件,插入一个长方体块进去,保存文件后打开就是我想要的视图,例如一个等二测的角度谢谢惊惊,南胜,鸿,和尚,大佬们关键1:DxfDocument.Viewport.ViewDirection关键2:向量与大小无关,只要等比例即可获取原图形中的视图角度,使用ifox的代码如下......
  • QCustomPlot添加自定义的图例,实现隐藏、删除功能(一)
    文章目录实现步骤:实现代码:代码讲解:功能说明:优化建议:其他参考:要实现一个支持勾选并可以控制曲线显示和隐藏的自定义QCPLegend类,可以通过继承QCPLegend并重写其相关方法来实现。我们需要添加一个自定义的复选框元素,并捕捉用户交互来实现曲线的隐藏......
  • Bootstrap Blazor自定义图片预览组件
            BootstrapBlazor的官方虽然有提供图片预览组件ImagePreviewer,但是,它是置于窗口顶层的,而且是全屏显示,如果业务中有在预览组件中添加其它功能的需求,它是不支持扩展的。    为此,我参考官方的源码,自己写了一个自定义图片预览组件,文件的源码在下面,可自行......
  • WinNTSetup 使用教程的框架,您可以根据自己的需求深入研究每个部分,特别是集成驱动、应
    WinNTSetupv5.3.5.2-InstallWindowsfromUSB-MSFNWinNTSetup官方原版多国语言版下载链接:https://www.mediafire.com/folder/53um6k2nmhvd5/https://www.mediafire.com/file/rbpu88tre4nxwbe/WinNTSetup_v5352.rar/fileWinNTSetupv5352初级使用教程大纲引言WinNTSet......
  • 鸿蒙HarmonyOS(ArkUI基础-3)
    文章目录ArkUI(方舟UI框架)1.简介2.基本概念3.概述4.布局1.概述......
  • 07LangChain实战课 - LLM模块使用与自定义模型调用
    LangChain实战课-LLM模块使用与自定义模型调用1.课程简介本节课聚焦于LangChain中的LLM(LargeLanguageModel)模块,探讨如何使用不同的大语言模型,包括开源模型和自定义模型。2.大语言模型的发展Transformer架构:Google在2018年提出的架构,是现代预训练模型的核心。基础......
  • 自定义注解实现权限校验
    自定义注解实现权限校验引入所需的依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>版本号</version><relativePath/></parent><depen......