HarmonyOS 鸿蒙Next 子窗口设置背景颜色不生效的问题

发布于 1周前 作者 bupafengyu 来自 鸿蒙OS

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’)后窗口背景颜色仍为白色。(如附件所示,浮窗的四个角为白色)
因为浮窗要设置为圆角,所以必须背景颜色为透明
请问要如何设置。

2 回复

这边设置是生效的,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 子窗口设置背景颜色不生效的问题,以下是一些可能的解决方案:

  1. 检查代码逻辑

    • 确保在设置背景颜色之前,子窗口已经被正确创建和显示。
    • 检查是否有其他代码或样式覆盖了背景颜色的设置。
  2. 更新系统API

    • 确认鸿蒙系统版本与应用的兼容性,确保使用的API是最新版本且支持背景颜色设置。
  3. 内存和资源管理

    • 检查应用是否存在内存泄漏问题,特别是与窗口管理相关的资源。
    • 确保子窗口所需的资源文件已正确引用,且没有空指针异常等问题。
  4. 参考官方文档

    • 查阅HarmonyOS官方文档,了解子窗口和背景颜色设置的正确方法和最佳实践。
  5. 调试和日志

    • 使用调试工具查看子窗口的创建和显示过程,检查是否有异常或错误。
    • 查看日志输出,特别是Error级别的日志,以获取更多关于背景颜色不生效的线索。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部