diff --git a/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-ComponentContent.md b/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-ComponentContent.md index df8a73bce82d678d0ada5fe72b6d6361e8981d94..105f9fdf6104613d14e6d7f24c4376629a8d08f1 100644 --- a/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-ComponentContent.md +++ b/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-ComponentContent.md @@ -484,7 +484,7 @@ updateConfiguration(): void **示例:** ```ts -import { NodeController, FrameNode, ComponentContent } from '@kit.ArkUI'; +import { NodeController, FrameNode, ComponentContent, UIContext, FrameCallback } from '@kit.ArkUI'; import { AbilityConstant, Configuration, EnvironmentCallback, ConfigurationConstant } from '@kit.AbilityKit'; @Builder @@ -523,6 +523,12 @@ class MyNodeController extends NodeController { } } +class MyFrameCallback extends FrameCallback { + onFrame() { + updateColorMode(); + } +} + function updateColorMode() { componentContentMap.forEach((value, index) => { value.updateConfiguration(); @@ -541,7 +547,7 @@ struct FrameNodeTypeTest { }, onConfigurationUpdated: (config: Configuration): void => { console.log('onConfigurationUpdated ' + JSON.stringify(config)); - updateColorMode(); + this.getUIContext()?.postFrameCallback(new MyFrameCallback()); } } // 注册监听回调 diff --git a/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-builderNode.md b/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-builderNode.md index 947bf22402874a941ef27c78f85a3b481a58f7b7..6f2bf199c9ad2d0a0e0adc58865f4d9fc5b8798a 100644 --- a/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-builderNode.md +++ b/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-builderNode.md @@ -994,7 +994,7 @@ updateConfiguration(): void **示例:** ```ts -import { NodeController, BuilderNode, FrameNode, UIContext } from "@kit.ArkUI"; +import { NodeController, BuilderNode, FrameNode, UIContext, FrameCallback } from "@kit.ArkUI"; import { AbilityConstant, Configuration, ConfigurationConstant, EnvironmentCallback } from '@kit.AbilityKit'; class Params { @@ -1069,9 +1069,15 @@ class TextNodeController extends NodeController { // 记录创建的自定义节点对象 const builderNodeMap: Array> = new Array(); +class MyFrameCallback extends FrameCallback { + onFrame() { + updateColorMode(); + } +} + function updateColorMode() { builderNodeMap.forEach((value, index) => { - // 通知BuilderNode环境变量改变 + // 通知BuilderNode环境变量改变,触发深浅色切换 value.updateConfiguration(); }) } @@ -1090,7 +1096,7 @@ struct Index { }, onConfigurationUpdated: (config: Configuration): void => { console.log('onConfigurationUpdated ' + JSON.stringify(config)); - updateColorMode(); + this.getUIContext()?.postFrameCallback(new MyFrameCallback()); } }; // 注册监听回调 diff --git a/zh-cn/application-dev/ui/ui-dark-light-color-adaptation.md b/zh-cn/application-dev/ui/ui-dark-light-color-adaptation.md index f69fec494523ed735cb221824e81765d5126bebe..1532531adb8d8dc51792725f9345f4a02d292a8a 100644 --- a/zh-cn/application-dev/ui/ui-dark-light-color-adaptation.md +++ b/zh-cn/application-dev/ui/ui-dark-light-color-adaptation.md @@ -73,7 +73,35 @@ Web组件支持对前端页面进行深色模式配置,可参考[Web组件深色模式](../web/web-set-dark-mode.md)进行相关配置。 -4. 应用监听深浅色模式切换事件 +4. "自定义节点"适配 + + 自定义节点BuilderNode和ComponentContent需手动传递系统环境变化事件,触发节点的全量更新,详细请参考[builderNode系统环境变化更新](../reference/apis-arkui/js-apis-arkui-builderNode.md#updateconfiguration12) + + ```ts + // 记录创建的自定义节点对象 + const builderNodeMap: Array> = new Array(); + + class MyFrameCallback extends FrameCallback { + onFrame() { + updateColorMode(); + } + } + + function updateColorMode() { + builderNodeMap.forEach((value, index) => { + // 通知BuilderNode环境变量改变,触发深浅色切换 + value.updateConfiguration(); + }) + } + // ... other code ... + aboutToAppear() { + // ... other code ... + this.getUIContext()?.postFrameCallback(new MyFrameCallback()); + // ... other code ... + } + ``` + +5. 应用监听深浅色模式切换事件 应用可以主动监听系统深浅色模式变化,进行其他类型的资源初始化等自定义逻辑。无论应用是否跟随系统深浅色模式变化,该监听方式均可生效。