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

在开发中需要实现一个浮窗,通过以下代码创建的子窗口设置背景颜色不生效。

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')后窗口背景颜色仍为白色。因为浮窗要设置为圆角,所以必须背景颜色为透明,请问要如何设置?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu
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();
  }
};
分享
微博
QQ
微信
回复
2天前
相关问题
如何设置窗口背景颜色
520浏览 • 1回复 待解决
HarmonyOS Badge文本颜色设置生效
427浏览 • 1回复 待解决
设置窗口透明度未生效
1808浏览 • 1回复 待解决
HarmonyOS 如何设置SubWindow背景颜色
159浏览 • 1回复 待解决
HarmonyOS 气泡背景颜色问题
145浏览 • 1回复 待解决
如何设置窗口背景
2037浏览 • 1回复 待解决
HarmonyOS 修改状态栏颜色生效
514浏览 • 1回复 待解决
XComponent组件如何设置背景颜色
2348浏览 • 1回复 待解决
HarmonyOS @Observed生效问题
666浏览 • 1回复 待解决
HarmonyOS margin生效问题
290浏览 • 1回复 待解决
HarmonyOS targetSpace生效问题
179浏览 • 1回复 待解决
HarmonyOS stack设置圆角生效
287浏览 • 1回复 待解决
HarmonyOS Panel 设置 borderRadius 生效
951浏览 • 1回复 待解决
ConstraintSize尺寸设置生效
2561浏览 • 1回复 待解决
HarmonyOS 窗口路由切换问题
237浏览 • 1回复 待解决