个人做网站 优帮云,衡天 wordpress,做练习题的网站,淄博城乡建设局网站介绍 
本示例介绍在开发应用以适应深色模式时#xff0c;对于深色和浅色模式的适配方案#xff0c;采取了多种策略如下#xff1a; 
1. 固定属性适配#xff1a;对于部分组件的颜色属性#xff0c;如背景色或字体颜色#xff0c;若保持不变#xff0c;可直接设定固定色值…介绍 
本示例介绍在开发应用以适应深色模式时对于深色和浅色模式的适配方案采取了多种策略如下 
1. 固定属性适配对于部分组件的颜色属性如背景色或字体颜色若保持不变可直接设定固定色值或引用固定的资源文件。 2. 双资源目录适配在resources目录下新增dark子目录用于存放深色模式下的特定颜色配置color.json文件和图片资源media文件。在深色模式下系统会自动加载此目录中的颜色及图片资源确保与浅色模式下的UI元素色彩差异性。 3. 利用系统分层参数对于支持深浅模式切换的系统层级颜色资源我们可以直接引用这些具有分层特性的参数使得当切换设备主题时相关组件的颜色能根据系统当前颜色模式自动更新。 4. 监听当前颜色模式变化通过注册AbilityStage.onConfigurationUpdate事件监听器实时捕捉到设备深浅颜色模式的变化并据此动态调整UI布局结构或逻辑处理以适应不同模式下的最佳视觉体验。 
效果图预览 使用说明 
1.在应用主页点击“深色模式”案例将应用切至后台系统颜色模式发生改变如在系统设置中切换深浅色模式当应用重新被激活至前台时能够立即检测到系统颜色模式的变化并自动更新为对应颜色主题的视图界面。 
实现思路 
1.当UI组件的颜色属性被设置为固定颜色值时其在深色模式和浅色模式下的显示颜色将保持不变。 
// 将Text直接设置成#000000固定色值
Text(精品好礼).opacity(0.6).fontColor($r(app.color.black_font_color)).margin({ left: $r(app.integer.text_margin_left) })2.为了实现深色模式下的颜色适配可以在resources目录下新建’dark/element’的子目录并在此目录中创建color.json文件。为深色模式下的各个UI组件指定相应的颜色值务必确保与浅色模式下同名颜色资源名称一致以确保系统能够正确识别并切换。 
// 用资源ID方式设置Column背景色。浅色模式色值为#FA5A3C、深色模式色值为#000000
.backgroundColor($r(app.color.column_bg_color))3.若UI组件的颜色属性引用的是系统提供的具有层级参数的颜色资源则当设备在深色模式和浅色模式间切换时这些颜色会自动调整至对应模式下的预设色值。 
// 用系统提供的分层参数颜色资源方式设置色值 
Text(item.price).fontSize($r(app.integer.goods_font)).offset({ x: -3 })// 因为是中文字符上面的是中文字符占的宽度不一样所以需要对齐添加offset.fontColor($r(sys.color.ohos_id_color_foreground))4.对于PNG、WEBP或JPEG格式的图片资源若需支持深色模式应在resources目录下新增一个’dark/media’子目录将深色模式下对应的图片放入此目录并确保图片文件名与浅色模式下的图片相同以便系统根据当前模式加载合适的图片资源。 
// SVG格式图片fillColor颜色资源ID方式设置浅色模式色值为#000000、深色模式色值为#FFFFFF
Image($r(app.media.view)).fillColor($r(app.color.view_fill_color)).width($r(app.integer.view_image_width)).aspectRatio(1).objectFit(ImageFit.Contain)5.在存在深浅两种模式下布局结构或逻辑处理有所差异的情况时开发者应当利用AbilityStage.onConfigurationUpdate监听接口来实时感知系统主题的变化并据此做出相应的布局调整或逻辑处理从而确保应用能够在不同模式下呈现出理想的界面效果及功能体验。 
第一步保存全局参数并通过onConfigurationUpdate刷新状态栏 
// 获取当前的颜色模式并保存并在onConfigurationUpdate
AppStorage.setOrCreate(currentColorMode, this.context.config.colorMode);
// 保存windowStage供fitfordarkmode的har包中FitForDarkPage.ets中setStatusBar方法修改状态栏颜色。
AppStorage.setOrCreate(windowStage, windowStage);// 检测当前的深浅模式是否发生变化刷新状态栏
onConfigurationUpdate(config: Configuration) {// 获取最新的变更颜色并更新到AppStorageAppStorage.setOrCreate(currentColorMode, config.colorMode);logger.info(onConfigurationUpdate, config: ${JSON.stringify(config)});
}第二步在FitForDarKMode.ets中获取并监听当前颜色模式 
// StorageProp  Watch 获取并监听当前颜色模式
StorageProp(currentColorMode) Watch(onColorModeChange) currentMode: number  0;
// Watch回调函数监听颜色模式刷新状态变量
onColorModeChange(): void {if (this.currentMode  ConfigurationConstant.ColorMode.COLOR_MODE_DARK) {this.banner  $r(app.media.dark_mode_banner);} else {this.banner  $r(app.media.light_mode_banner);}
}第三步在FitForDarKMode.ets生命周期aboutToAppear中根据当前颜色模式刷新banner状态变量切换不同的图片。 
// 在自定义组件生命周期aboutToAppear中根据当前颜色模式刷新banner状态变量切换不同的图片。
aboutToAppear(): void {if (this.currentMode  ConfigurationConstant.ColorMode.COLOR_MODE_DARK) {this.banner  $r(app.media.dark_mode_banner);
} else {this.banner  $r(app.media.light_mode_banner);// 在当前为浅色模式中确保界面美观且颜色统一设置导航栏的背景色。setStatusBar(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);}
}第四步在FitForDarKMode.ets生命周期aboutToDisappear中重置导航栏的背景色避免影响其它页面的导航栏为红色。 
// 在自定义组件生命周期aboutToDisappear中重置导航栏的背景色避免影响其它页面的导航栏为红色。
aboutToDisappear(): void {setStatusBar(this.currentMode)
}第五步在FitForDarKMode.ets生命周期aboutToDisappear中重置导航栏的背景色避免影响其它页面的导航栏为红色。 
// 调用setWindowSystemBarProperties()设置状态栏及导航栏的颜色
windowClass.setWindowSystemBarProperties(sysBarProps, (err)  {if (err.code) {logger.error(Failed to set the system bar properties. Cause:   JSON.stringify(err));return;}logger.info(Succeeded in setting the system bar properties.);
});高性能知识点 
不涉及 
工程结构模块类型 
fitfordarkmode                                   // har类型
|---mock
|   |---GoodsMock.ets                            // 商品列表数据 
|---mode
|   |---GoodsModel.ets                           // 商品数据类型定义 
|---view
|   |---FitForDarkMode.ets                       // 深色模式适配主页面 
|   |---GoodsList.ets                            // 商品列表自定义组件 模块依赖 
本实例依赖common模块来实现资源的调用以及公共组件FunctionDescription的引用。 还需要依赖EntryAbility.ets模块。 
为了帮助大家更深入有效的学习到鸿蒙开发知识点小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源获取完整版方式请点击→HarmonyOS教学视频https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3 
HarmonyOS教学视频语法ArkTS、TypeScript、ArkUI等…视频教程 鸿蒙生态应用开发白皮书V2.0PDF 获取完整版白皮书方式请点击→https://docs.qq.com/doc/DZVVkRGRUd3pHSnFG?ua42c4946d1514235863bb82a7b2ac128 鸿蒙 (Harmony OS)开发学习手册→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3 
一、入门必看 
1.应用开发导读(ArkTS) 2……… 
二、HarmonyOS 概念→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3 
1.系统定义 2.技术架构 3.技术特性 4.系统安全 5…  
三、如何快速入门→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3 
1.基本概念 2.构建第一个ArkTS应用 3…  
四、开发基础知识→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3 
1.应用基础知识 2.配置文件 3.应用数据管理 4.应用安全管理 5.应用隐私保护 6.三方应用调用管控机制 7.资源分类与访问 8.学习ArkTS语言 
五、基于ArkTS 开发→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3 
1.Ability开发 2.UI开发 3.公共事件与通知 4.窗口管理 5.媒体 6.安全 7.网络与链接 8.电话服务 9.数据管理 10.后台任务(Background Task)管理 11.设备管理 12.设备使用信息统计 13.DFX 14.国际化开发 15.折叠屏系列 
更多了解更多鸿蒙开发的相关知识可以参考https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3