HarmonyOS鸿蒙Next中如何修改PC模式下窗口的背景色

HarmonyOS鸿蒙Next中如何修改PC模式下窗口的背景色 官方文档提供的修改方式设置window背景色后,透明效果只在手机平板端普通和小窗模式生效 分屏模式下会变成纯黑色背景 PC模式透明会露出系统窗口底色sys.color.gary02 而不是透明的桌面壁纸效果

有办法修改这一部分颜色也变成透明吗

图片 图片


更多关于HarmonyOS鸿蒙Next中如何修改PC模式下窗口的背景色的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

【背景知识】

  • setWindowBackgroundColor设置窗口的背景色。Stage模型下,该接口需要在loadContent()setUIContent()调用生效后使用。
  • setWindowContainerColor设置主窗口容器在焦点态和非焦点态时的背景色。在Stage模型下,该接口需在调用loadContent()或setUIContent()后使用。
  • 窗口容器背景色(setWindowContainerColor)覆盖整个窗口区域,包括标题栏和内容区域。当同时使用该接口和setWindowBackgroundColor设置背景色时,内容区域显示窗口背景色,标题栏显示窗口容器背景色。

【解决方案】 由于PC窗口存在标题栏,因此设置PC窗口透明背景色需要setWindowBackgroundColor与setWindowContainerColor搭配使用,才能使得整个PC窗口透明。示例代码如下:

  • 在module.json5中配置权限。
"requestPermissions": [
  {
    'name': "ohos.permission.SET_WINDOW_TRANSPARENT"
  }
],
  • 给PC窗口设置透明色(’#00000000’)。
import { window } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  private message: string = 'Hello World';
  uiContext = this.getUIContext();

  // 在aboutToAppear()生命周期中设置PC窗口背景颜色
  aboutToAppear(): void {
    window.getLastWindow(this.uiContext?.getHostContext(), (err, data) => {
      try {
        data.setWindowBackgroundColor('#00000000');
        data.setWindowContainerColor('#00000000', '#FF000000');
      } catch (exception) {
        console.error(`Failed to set the background color. Cause code: ${exception.code}, message: ${exception.message}`);
      };
    });

  }

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('Page2HelloWorld')
        .fontSize(50)
        .fontColor(Color.White)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        });
    };
  }
}

更多关于HarmonyOS鸿蒙Next中如何修改PC模式下窗口的背景色的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


似乎无效,

开发者你好,我这边使用上述代码能够实现透明化的需求,还请提供下“无效”的demo,

其他设备都能正常透明,PC设置无效

cke_300.png

cke_890.jpeg

注意到代码中窗口的非焦点态设置的颜色是#80000000,而窗口在非焦点态下,不可设置透明色,所以不生效,

好的解决了,文档说明写的不完整这个内容应该提示的,

在HarmonyOS Next的PC模式下,窗口背景色可通过修改窗口管理器配置或主题设置调整。具体操作涉及修改系统资源文件中的颜色值,例如在resources/base/media/路径下调整主题配置文件。开发者需在DevEco Studio中编辑对应的JSON或XML资源文件,定义窗口背景色属性。

在HarmonyOS Next中,PC模式下窗口背景色的透明效果受限,主要是由于系统层级的渲染差异。当前官方提供的windowBackground等属性在PC模式或分屏时,可能被系统窗口管理器覆盖,导致显示为默认底色(如sys.color.gray02)而非透明桌面壁纸。

要尝试优化,可考虑以下方案:

  1. 检查窗口标志位:确保窗口配置中已启用透明背景支持,例如在AbilityStageWindow设置中明确声明透明属性。
  2. 使用全屏或自定义窗口:通过windowClass创建自定义窗口,并设置WindowType.TYPE_FLOAT等类型,结合alpha属性调整透明度,但需注意PC模式可能限制全局透明。
  3. 动态适配渲染模式:通过display.getDefaultDisplay()获取运行环境,针对PC模式使用单独的背景处理逻辑,例如替换为半透明色或动态壁纸截图。

目前系统对PC模式的多窗口透明支持尚不完善,若上述方法无效,可能是底层框架限制。建议关注后续版本更新,查看相关API变更。

回到顶部