HarmonyOS鸿蒙Next中window设置size,希望size之外的区域可点击
HarmonyOS鸿蒙Next中window设置size,希望size之外的区域可点击 window设置size,size之外的区域不可点击,希望window下的页面自己按钮等事件可以正常触发
3 回复
一、EntryAbility.ets的onWindowStageCreate中保存windowStage
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Splash', (err, data) => {
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. Data: %{public}s', JSON.stringify(data) ?? '');
});
// 此行为新增, 用于保存windowStage
AppStorage.setOrCreate("windowStage", windowStage);
}
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
}
}
二、Splash.ets的定时任务由你原先的showAlertWithPath改成我这里提供的showSubWindow。
aboutToAppear() {
setTimeout(() => {
// this.showAlertWithPath(this.context)
this.showSubWindow()
}, 4000)
}
// 采用子窗口
showSubWindow() {
try {
let windowStage = AppStorage.get("windowStage") as window.WindowStage;
windowStage.createSubWindow("AlertDialogWindow", (err: BusinessError, windowClass) => {
const errCode: number = err.code;
if (errCode && (windowClass == null || windowClass == undefined)) {
console.error('Failed to create the window. Cause: ' + JSON.stringify(err));
return;
}
// 设置window大小
windowClass.resize(display.getDefaultDisplaySync().width, vp2px(108));
windowClass.loadContent('pages/Second', LocalStorage.getShared()).then(() => {
windowClass?.setWindowBackgroundColor('#ffff0000')
});
windowClass.showWindow();
});
} catch (exception) {
console.error('Failed to create the window. Cause: ' + JSON.stringify(exception));
}
}
更多关于HarmonyOS鸿蒙Next中window设置size,希望size之外的区域可点击的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,设置窗口大小(size)并希望size之外的区域可点击,可以通过Window和WindowManager的相关API实现。首先,使用Window的setSize方法设置窗口的大小。然后,通过WindowManager的setWindowAttributes方法,设置窗口的flags属性,使其能够响应点击事件。具体操作如下:
- 使用
Window的setSize方法设置窗口大小:
let window = new Window();
window.setSize({ width: 300, height: 200 });
- 使用
WindowManager的setWindowAttributes方法,设置窗口的flags属性:
let windowManager = new WindowManager();
windowManager.setWindowAttributes(window, {
flags: WindowFlag.WINDOW_FLAG_NOT_TOUCH_MODAL
});
通过以上设置,窗口之外的区域将能够响应点击事件。需要注意的是,WINDOW_FLAG_NOT_TOUCH_MODAL标志允许窗口之外的区域接收点击事件,而不会影响窗口本身的触摸事件。
在HarmonyOS鸿蒙Next中,如果你想设置窗口大小并允许窗口之外区域可点击,可以通过以下步骤实现:
- 设置窗口大小:使用
Window的setPreferredSize方法设置窗口的尺寸。 - 设置窗口属性:通过
Window的setFlags方法设置WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL标志,允许点击窗口之外的区域。
示例代码:
Window window = getWindow();
window.setPreferredSize(new Size(800, 600));
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
这样,窗口之外的区域仍然可以接收点击事件。

