华为仓颉鸿蒙HarmonyOS NEXT仓颉原生CustomDialogController 自定义弹窗

通过CustomDialogController类显示自定义弹窗。使用弹窗组件时,可优先考虑自定义弹窗,便于自定义弹窗的样式与内容。

图片

说明

自定义弹窗组件需要用@CustomDialog修饰,
@CustomDialog是一个具有限制的@Component,
@CustomDialog修饰的组件必须包含一个类型为Option<Customdialog>的
属性。这个属性会在使用到该弹窗的组件中被隐式地赋值。
混合页面场景下CustomDialog暂不支持设置动画属性。

构造函数

init(CustomDialogControllerOptions)

public init(options: CustomDialogControllerOptions)

自定义弹窗的所有参数,不支持动态刷新。

参数名 参数类型 必填 默认值 描述
options CustomDialogControllerOptions - 自定义弹窗设置的参数。

说明

构造的时候options参数需直接使用CustomDialogControllerOptions
构造函数,不能使用变量。

函数

close()

public func close()

关闭显示的自定义弹窗,若已关闭,则不生效。

open()

public func `open`()

显示自定义弹窗内容,允许多次使用,但如果弹框为SubWindow模式,则该弹框不允许再弹出SubWindow弹框。

setBuilder(()-> Unit)

public func setBuilder(builder: ()-> Unit)

设置一个构建器,用户无需主动调用,会在宏展开后隐式地调用。

参数名 参数类型 必填 默认值 描述
builder ()-> Unit - builder对应的渲染函数。

bindView(CustomView)

public func bindView(view: CustomView)

将CustomView绑定到自定义弹窗构建器, 用户无需主动调用,会在宏展开后隐式地调用。

参数名 参数类型 必填 默认值 描述
view CustomView - 被绑定的CustomView。

枚举类型

DialogAlignment

定义弹窗在竖直方向上的对齐方式。

枚举值 描述
Top 垂直顶部对齐。
Center 垂直居中对齐。
Bottom 垂直底部对齐。
Default 默认对齐。
TopStart 左上对齐。
TopEnd 右上对齐。
CenterStart 左中对齐。
CenterEnd 右中对齐。
BottomStart 左下对齐。
BottomEnd 右下对齐。

自定义类型说明

CustomDialogControllerOptions

构造函数

public init(
        builder: () -> Unit,
        cancel!: () -> Unit = { => },
        autoCancel!: Bool = true,
        alignment!: DialogAlignment = DialogAlignment.Default,
        offset!: Offset = Offset(0.vp, 0.vp),
        customStyle!: Bool = false,
        gridCount!: Option<Int32> = Option.None,
        maskColor!: Color = Color(0x33000000),
        maskRect!: Rectangle = Rectangle(),
        openAnimation!: Option<AnimateParam> = Option.None,
        closeAnimation!: Option<AnimateParam> = Option.None,
        showInSubWindow!: Bool = false,
        backgroundColor!: Option<Color> = Option.None,
        cornerRadius!: Length = 24.vp
    )

声明自定义弹窗相关设置的参数。

参数名 参数类型 必填 默认值 描述
builder ()-> Unit 自定义弹窗内容构造器。
cancel ()-> Unit 返回、ESC键和点击遮障层弹窗退出时的回调。
autoCancel Bool true 是否允许点击遮障层退出,true表示关闭弹窗。false表示不关闭弹窗。
alignment DialogAlignment DialogAlignment.Default 弹窗在竖直方向上的对齐方式。
offset Offset Offset(0.vp, 0.vp) 弹窗相对alignment所在位置的偏移量。
customStyle Bool false 弹窗容器样式是否自定义。设置为false时,弹窗容器的宽度根据栅格系统自适应,不跟随子节点;高度自适应子节点,最大为窗口高度的90%。设置为true时,宽度跟随子节点自适应,圆角为0,弹窗背景色为透明色。
gridCount Option Option.None 弹窗宽度占栅格宽度的个数。默认为按照窗口大小自适应,异常值按默认值处理,最大栅格数为系统最大栅格数。
maskColor Color Color(0x33000000) 自定义蒙层颜色。
maskRect Rectangle Rectangle() 弹窗遮蔽层区域,在遮蔽层区域内的事件不透传,在遮蔽层区域外的事件透传。
openAnimation Option Option.None 自定义设置弹窗弹出的动画效果相关参数。iterations默认值为1,默认播放一次,设置为其他数值时按默认值处理。playMode控制动画播放模式,默认值为PlayMode.Normal,设置为其他数值时按照默认值处理。
closeAnimation Option Option.None 自定义设置弹窗关闭的动画效果相关参数。iterations默认值为1,默认播放一次,设置为其他数值时按默认值处理。playMode控制动画播放模式,默认值为PlayMode.Normal,设置为其他数值时按照默认值处理。
showInSubWindow Bool false 某弹框需要显示在主窗口之外时,是否在子窗口显示此弹窗。showInSubWindow为true的弹窗无法触发显示另一个showInSubWindow为true的弹窗。
backgroundColor Option Option.None 设置弹窗背板填充。如果同时设置了内容构造器的背景色,则backgroundColor会被内容构造器的背景色覆盖。
cornerRadius Length 24.vp 设置背板的圆角半径。

说明

参数builder并非init函数的实际参数,在@Component宏展开后会去掉该参数
并隐式地在组件初始化函数中调用 setBuilder(builder: ()-> Unit)。

示例代码

import ohos.base.*
    import ohos.component.*
    import ohos.state_manage.*
    import ohos.state_macro_manage.*
    
    @CustomDialog
    class MyDialog {
        var controller: Option<CustomDialogController> = Option.None
        func build() {
            Row(60) {
                Button("cancel").onClick { evt =>
                    controller?.close()
                }
    
                Button("confirm").onClick { evt =>
                    controller?.close()
                }
            }.height(500.px)
        }
    }
    
    @Entry
    @Component
    class MyView {
        var dialogController: CustomDialogController = CustomDialogController(CustomDialogControllerOptions(builder: MyDialog()))
        func build() {
            Column {
                Button("open dialog").onClick({evt =>
                    dialogController.`open`()
                })
            }
        }
    }

如对您有帮助,帮忙点个“在看 、关注” 让更多的人受益~!

技术交流群可加wx“LB-9191”备注cangjie

posted @ 2024-12-25 08:49  BisonLiu  阅读(170)  评论(0)    收藏  举报