HarmonyOS 鸿蒙Next 自定义弹窗如何在onWindowStageCreate中调用
HarmonyOS 鸿蒙Next 自定义弹窗如何在onWindowStageCreate中调用
目前做了一个自定义弹窗,是用作隐私协议。需要它在应用刚启动时,还未到达首页前就调用,判断用户是否隐私授权。
在entryability内:
getDataPreferences() {
return preferences.getPreferences(this.context, ‘myStore’);
}
dialogController: CustomDialogController = new CustomDialogController({
builder: CustomDialogComponent(
{
cancel: () => {
this.dialogController.close()
},
confirm: () => {
let preferences: Promise<preferences.Preferences> = this.getDataPreferences();
preferences.then((data: preferences.Preferences) => {
//首选项存之isPrivacy为假
let privacyPut = data.put(‘isPrivacy’, false);
data.flush();
privacyPut.then(() => {
hilog.info(0, ‘LauncherPage’, ‘Put the value of startup Successfully.’);
}).catch((err: Error) => {
hilog.error(0, ‘LauncherPage’, 'Put the value of startup Failed, err: ’ + err);
});
}).catch((err: Error) => {
hilog.error(0, ‘LauncherPage’, 'Get the preferences Failed, err: ’ + err);
});
}
}),
alignment: DialogAlignment.Center,
offset: { dx: 0, dy: 0 },
//customStyle默认false。圆角32vp。不设高度宽度则弹窗高度/宽度自适应。
customStyle: false,
autoCancel: false,
width: ‘310vp’,
cornerRadius:‘12vp’
});
onWindowStageCreate(windowStage: window.WindowStage): void {
AppStorage.setOrCreate(‘context’, this.context)
this.getDataPreferences().then((preferences: preferences.Preferences) => {
//判断首选项里取值真假,默认为真则弹窗,否则加载首页
preferences.get(‘isPrivacy’, true).then((value: preferences.ValueType) => {
hilog.info(0, ‘LauncherPage’, 'onPageShow value: ’ + value);
if (value) {
this.dialogController.open(); //期望效果是打开自定义隐私弹窗,但实际效果并未打开
}else {
windowStage.loadContent(‘pages/LauncherPage’, (err) => {
if (err.code) {
hilog.error(0x0000, ‘testTag’, ‘Failed to load the content. Cause: %{public}s’, JSON.stringify(err) ?? ‘’);
return;
}
hilog.info(0x0000, ‘testTag’, ‘Succeeded in loading the content.’);
});
}
});
});
// Main window is created, set main page for this ability
hilog.info(0x0000, ‘testTag’, ‘%{public}s’, ‘Ability onWindowStageCreate’);
}
目前效果是在启动图标处一直卡死,启动应用时只显示启动图标,并不弹窗,也不进入首页(逻辑判断上是没有问题的)。
问题在于启动时弹窗并不打开,如何解决,或达到应用刚启动时,还未到达首页前调用隐私授权的效果呢
更多关于HarmonyOS 鸿蒙Next 自定义弹窗如何在onWindowStageCreate中调用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next 自定义弹窗如何在onWindowStageCreate中调用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
CustomDialogController仅在作为[@CustomDialog](/user/CustomDialog)和[@Component](/user/Component) struct的成员变量,且在[@Component](/user/Component) struct内部定义时赋值才有效,具体用法可看下方示例。
即自定义弹窗调用的合理场景必须能通过getContext()获取到Ability的上下文对象吗,onWindowStageCreate即使可以通过this.context获取上下文对象,亦不满足条件
在HarmonyOS 鸿蒙Next系统中,自定义弹窗的创建和调用通常涉及UI框架和窗口管理。在onWindowStageCreate
中调用自定义弹窗,你可以通过以下步骤实现:
-
定义弹窗组件:首先,在你的资源文件中定义一个弹窗的XML布局文件,这个文件描述了弹窗的UI结构。
-
创建弹窗实例:在
onWindowStageCreate
回调中,通过代码加载并实例化这个布局文件。你可以使用ComponentFactory
和ComponentContainer
来完成这一步骤。 -
配置弹窗属性:设置弹窗的大小、位置、透明度等属性,这些属性可以通过
Component
的相关方法来进行设置。 -
显示弹窗:调用
ComponentContainer
的add
或replace
方法将弹窗添加到当前窗口的组件树中,这样弹窗就会被显示出来。 -
事件处理:如果需要处理弹窗中的用户交互事件,如按钮点击,你需要为相应的组件设置事件监听器,并在监听器中实现相应的逻辑。
示例代码(伪代码):
@Override
public void onWindowStageCreate(WindowStage windowStage) {
super.onWindowStageCreate(windowStage);
// 加载弹窗布局
Component popupComponent = ...;
// 设置弹窗属性
...
// 将弹窗添加到窗口
windowStage.getComponentContainer().add(popupComponent);
}
注意:上述代码为伪代码,实际实现需根据HarmonyOS的具体API进行。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html