ArkTS鸿蒙制作自定义弹窗

一、弹窗的概念

        弹窗一般指打开应用时自动弹出或者用户行为操作时弹出的UI界面,用于短时间内展示用户需关注的信息或待处理的操作。

二、构建自定义弹窗

        1、在构建自定义弹窗时,需要创建自定义弹窗的控制器CustomDialogController,该控制器仅在作为@CustomDialog 和 @Component struct成员变量 ,且在@Component struct 内部定义时赋值才有效。

        2、自定义弹窗的构造器constructor,里面可以实现的接口参数有:

                builder: 自定义弹窗的内容构造器;

                cancel: 点击返回键、ESC键和点击遮罩层弹窗退出时触发的回调函数;

                autoCancel: 设置是否允许点击遮罩层(弹窗以外的区域)退出弹窗,true表示关闭弹窗,false表示不关闭弹窗;

                alignment: 弹窗在竖直方向上的对齐方式。默认值:DialogAlignment.Default;

                offset: 弹窗相对alignment所在的位置偏移量。默认值:{ dx: 0, dy: 0 };

                customStyle: 弹窗容器样式是否自定义。值为true表示弹窗容器样式不能自定义,值为false表示弹窗容器样式能自定义。

                gridCount: 弹窗宽度占栅格宽度的个数。默认为按照窗口大小自适应,异常值按默认值处理,最大栅格数为系统最大栅格数。取值范围:大于等于0的整数;

                maskColor: 自定义蒙层颜色。默认值:0x33000000;

                maskRect: 弹窗遮蔽层区域,在遮蔽层区域内的事件不透传,在遮蔽层区域外的事件透传。默认值:{ x: 0, y: 0, width: '100%', height: '100%' };

                openAnimation: 自定义设置弹窗弹出的动画效果相关参数;

                closeAnimation: 自定义设置弹窗关闭的动画效果相关参数;

                showInSubWindow: 某弹框需要显示在主窗口之外时,是否在子窗口显示此弹窗。值为true表示在子窗口显示弹窗。默认值:false,弹窗显示在应用内,而非独立子窗口;

                backgroundColor: 设置弹窗背板填充。默认值:Color.Transparent;

                cornerRadius:设置背板的圆角半径。可分别设置4个圆角的半径。默认值:{ topLeft: '32vp', topRight: '32vp', bottomLeft: '32vp', bottomRight: '32vp' };

                isModal:弹窗是否为模态窗口。值为true表示为模态窗口且有蒙层,不可与弹窗周围其他控件进行交互,即蒙层区域无法事件透传。值为false表示为非模态窗口且无蒙层,可以与弹窗周围其他控件进行交互。默认值:true;

                onWillDismiss:交互式关闭回调函数;

                borderWidth:设置弹窗背板的边框宽度。可分别设置4个边框宽度。默认值:0。百分比参数方式:以父元素弹窗宽的百分比来设置弹窗的边框宽度。当弹窗左边框和右边框大于弹窗宽度,弹窗上边框和下边框大于弹窗高度,显示可能不符合预期;

                borderColor:设置弹窗背板的边框颜色。默认值:Color.Black如果使用borderColor属性,需要和borderWidth属性一起使用;

                borderStyle:设置弹窗背板的边框样式。默认值:BorderStyle.Solid如果使用borderStyle属性,需要和borderWidth属性一起使用;

                width:设置弹窗背板的宽度;

                height:设置弹窗背板的高度;

                shadow:设置弹窗背板的阴影;

                backgroundBlurStyle:弹窗背板模糊材质;

                keyboardAvoidMode:用于设置弹窗是否在拉起软键盘时进行自动避让。默认值:KeyboardAvoidMode.DEFAULT;

        3、说明:

                1.按下返回键和ESC键时会让弹窗退出;

                2.弹窗在避让软键盘时到达极限高度后会压缩高度。需要注意:高度压缩生效在外层容器上,如果容器根节点中的子组件设置了较大的固定高度,由于容器默认不裁剪,依然可能存在超出屏幕显示的情况。

                3.自定义弹窗仅适用于简单提示场景,不能替代页面使用。弹窗避让软键盘时,与软键盘之间存在16vp的安全间距。

                4.当前,ArkUI弹出框默认为非页面级弹出框。在页面路由跳转时,如果开发者未调用close方法将其关闭,弹出框将不会自动关闭。若需实现在跳转页面时覆盖弹出框的场景,可以使用组件导航子页面显示类型的弹窗类型或者页面级弹出框。

三、自定义弹窗的使用案例

        1、在弹窗中打开另一个弹窗:若尝试在CustomDialog中传入多个其他的Controller,以实现在CustomDialog中打开另一个或另一些CustomDialog,那么此处需要将指向自己的controller放在所有controller的后面

        创建第一层弹窗的内容:

        创建嵌套弹窗的内容:

        效果截图:

        

        2、使用@Link装饰器实现页面与弹窗内数据的双向绑定

                弹窗内容构建:

        效果截图:

        

### 创建和使用鸿蒙 ArkTS 自定义弹窗组件 #### 定义自定义弹窗组件 为了在鸿蒙 ArkTS 中创建自定义弹窗,首先需要构建一个新的组件来表示这个弹窗。这可以通过继承 `Component` 类并重写其方法来完成。 ```typescript import { Component } from '@ohos/arkui'; class CustomDialog extends Component { constructor(props) { super(props); this.state = { visible: false, }; } show() { this.setState({ visible: true }); } hide() { this.setState({ visible: false }); } render() { const style = this.state.visible ? 'visible' : 'hidden'; return ( <div class={`dialog ${style}`}> {/* Dialog content goes here */} <button onClick={() => this.hide()}>Close</button> </div> ); } } ``` 上述代码展示了如何通过设置状态变量控制弹窗显示与否[^1]。 #### 使用自定义弹窗组件 一旦完成了自定义弹窗组件的设计,在页面或其他父级组件中就可以轻松调用它了: ```typescript import React, { useState } from 'react'; // Import the custom dialog component defined above. import CustomDialog from './CustomDialog'; function App() { const [isModalVisible, setIsModalVisible] = useState(false); function showModal() { setIsModalVisible(true); } function handleOk() { console.log('Clicked ok button'); setIsModalVisible(false); } function handleCancel() { console.log('Clicked cancel button'); setIsModalVisible(false); } return ( <> <Button type="primary" onClick={showModal}> Open Modal with Custom Footer </Button> <CustomDialog title="Title Text" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel} > Some contents... </CustomDialog> </> ); } ``` 这段代码片段说明了怎样引入之前创建好的 `CustomDialog` 组件,并且提供了展示与隐藏该对话框的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值