HarmonyOS 鸿蒙Next 子窗口设置背景颜色不生效的问题
HarmonyOS 鸿蒙Next 子窗口设置背景颜色不生效的问题
let mainWindow: window.WindowStage = AppStorage.get(CommonConstants.MAIN_WINDOW) as window.WindowStage;
mainWindow.createSubWindow(CommonConstants.VOICE_BROADCAST_SUB_WINDOW, (err, subWindow) => {
if (err.code > 0) {
Logger.error(TAG, ‘Failed to create subWindow. Cause: ’ + JSON.stringify(err));
return;
}
try {
subWindow.loadContent(‘news/pages/VoiceBroadcastSubWindow’, storage, (err: BusinessError) => {
const errCode: number = err.code;
if (errCode) {
Logger.error(TAG,
Failed to load the content. Cause code: ${err.code}, message: ${err.message}
);return;
}
console.info(‘Succeeded in loading the content.’);
});
// 设置子窗口左上角坐标
subWindow.moveWindowTo(vp2px(5), vp2px(700));
// 设置子窗口大小
subWindow.resize(vp2px(220), vp2px(40));
// 展示子窗口
subWindow.showWindow();
subWindow.setWindowBackgroundColor(’#00000000’)
} catch (err) {
Logger.error(TAG,
failed to create subWindow Cause: ${err.code}, message: ${err.message}
);}
})
调用subWindow.setWindowBackgroundColor(’#00000000’)后窗口背景颜色仍为白色。(如附件所示,浮窗的四个角为白色)
因为浮窗要设置为圆角,所以必须背景颜色为透明
请问要如何设置。
这边设置是生效的,page2、page3只是两个helloword页面。
参考demo:
import { UIAbility } from '@kit.AbilityKit';
import { window } from ‘@kit.ArkUI’;
import { BusinessError } from ‘@kit.BasicServicesKit’;
let windowStage_: window.WindowStage | null = null;
let sub_windowClass: window.Window | null = null;
export default class EntryAbility extends UIAbility {
showSubWindow() {
// 1.创建应用子窗口。
if (windowStage_ == null) {
console.error(‘Failed to create the subwindow. Cause: windowStage_ is null’);
}
else {
windowStage_.createSubWindow(“mySubWindow”, (err: BusinessError, data) => {
let errCode: number = err.code;
if (errCode) {
console.error('Failed to create the subwindow. Cause: ’ + JSON.stringify(err));
return;
}
sub_windowClass = data;
console.info('Succeeded in creating the subwindow. Data: ’ + JSON.stringify(data));
// 2.子窗口创建成功后,设置子窗口的位置、大小及相关属性等。
sub_windowClass.moveWindowTo(300, 300, (err: BusinessError) => {
let errCode: number = err.code;
if (errCode) {
console.error(‘Failed to move the window. Cause:’ + JSON.stringify(err));
return;
}
console.info(‘Succeeded in moving the window.’);
});
sub_windowClass.resize(500, 500, (err: BusinessError) => {
let errCode: number = err.code;
if (errCode) {
console.error(‘Failed to change the window size. Cause:’ + JSON.stringify(err));
return;
}
console.info(‘Succeeded in changing the window size.’);
});
// 3.为子窗口加载对应的目标页面。
sub_windowClass.setUIContent(“pages/Page3”, (err: BusinessError) => {
sub_windowClass?.setWindowBackgroundColor("#00000000")
let errCode: number = err.code;
if (errCode) {
console.error(‘Failed to load the content. Cause:’ + JSON.stringify(err));
return;
}
console.info(‘Succeeded in loading the content.’);
// 3.显示子窗口。
(sub_windowClass as window.Window).showWindow((err: BusinessError) => {
let errCode: number = err.code;
if (errCode) {
console.error('Failed to show the window. Cause: ’ + JSON.stringify(err));
return;
}
console.info(‘Succeeded in showing the window.’);
});
});
})
}
}
destroySubWindow() {
// 4.销毁子窗口。当不再需要子窗口时,可根据具体实现逻辑,使用destroy对其进行销毁。
(sub_windowClass as window.Window).destroyWindow((err: BusinessError) => {
let errCode: number = err.code;
if (errCode) {
console.error('Failed to destroy the window. Cause: ’ + JSON.stringify(err));
return;
}
console.info(‘Succeeded in destroying the window.’);
});
}
onWindowStageCreate(windowStage: window.WindowStage) {
windowStage_ = windowStage;
windowStage.loadContent(“pages/Page2”, (err: BusinessError) => {
let errCode: number = err.code;
if (errCode) {
console.error(‘Failed to load the content. Cause:’ + JSON.stringify(err));
return;
}
console.info(‘Succeeded in loading the content.’);
});
// 开发者可以在适当的时机,如主窗口上按钮点击事件等,创建子窗口。并不一定需要在onWindowStageCreate调用,这里仅作展示
this.showSubWindow();
}
onWindowStageDestroy() {
// 开发者可以在适当的时机,如子窗口上点击关闭按钮等,销毁子窗口。并不一定需要在onWindowStageDestroy调用,这里仅作展示
this.destroySubWindow();
}
};
设置窗口的背景色。Stage模型下,该接口需要在loadContent()或setUIContent()调用生效后使用
针对HarmonyOS 鸿蒙Next 子窗口设置背景颜色不生效的问题,以下是一些可能的解决方案:
-
检查代码逻辑:
- 确保在设置背景颜色之前,子窗口已经被正确创建和显示。
- 检查是否有其他代码或样式覆盖了背景颜色的设置。
-
更新系统API:
- 确认鸿蒙系统版本与应用的兼容性,确保使用的API是最新版本且支持背景颜色设置。
-
内存和资源管理:
- 检查应用是否存在内存泄漏问题,特别是与窗口管理相关的资源。
- 确保子窗口所需的资源文件已正确引用,且没有空指针异常等问题。
-
参考官方文档:
- 查阅HarmonyOS官方文档,了解子窗口和背景颜色设置的正确方法和最佳实践。
-
调试和日志:
- 使用调试工具查看子窗口的创建和显示过程,检查是否有异常或错误。
- 查看日志输出,特别是Error级别的日志,以获取更多关于背景颜色不生效的线索。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html