山海万灵 HarmonyOS 文化知识实战(09):深浅色资源与文化插画层级

发布时间:2026/9/20 1:23:03

山海万灵 HarmonyOS 文化知识实战(09):深浅色资源与文化插画层级 文化知识应用的插画通常承担路线、地域、神兽与进度提示等信息。只替换页面背景色会让深色界面的山水纹理、金色强调色和卡片文本彼此争夺注意力反过来浅色界面也容易因透明图层过多而丢失边界。山海万灵把颜色、插画和组件表面拆成同一套主题分支让主题切换直接驱动页面外壳、内容卡片与背景资源更新。上图的浅色首页保留了山水路线、地域节点、统计卡和底部导航。卡片使用浅色表面和偏深文字路线与“继续探索”按钮使用独立的强调色避免在大面积插画上把所有信息都压成同一层。把主题值收敛成可组合的令牌页面不直接散落判断式颜色。ShanhaiTheme为背景、卡片、边框、主次文本、金色强调与地图路线提供成对值组件只根据isDarkMode读取语义化令牌。这样新增页面时只选择它需要的角色不必重新发明一组深浅色常量。static readonly PAGE_BG: string #07171C; static readonly DARK_CARD_SURFACE: string #03171D; static readonly DARK_CARD_RAISED: string #0A252C; static readonly DARK_CARD_SELECTED: string #16444A; static readonly LINE: string #2F6268; static readonly GOLD: string #D8A84E; static readonly CREAM: string #F7EBD3; static readonly SUB_TEXT: string #B7CACB; static readonly LIGHT_PAGE_BG: string #F6F0E4; static readonly LIGHT_PANEL_BG: string #FFF9ED; static readonly LIGHT_PANEL_BG_ALT: string #EAF1E4; static readonly LIGHT_TAG_BG: string #E2EAD9; static readonly LIGHT_LINE: string #C8B98F; static readonly LIGHT_GOLD: string #A56F20; static readonly LIGHT_CREAM: string #26372E; static readonly LIGHT_SUB_TEXT: string #5F6D64; static pageBg(isDarkMode: boolean): string { return isDarkMode ? ShanhaiTheme.PAGE_BG : ShanhaiTheme.LIGHT_PAGE_BG; } static panelBg(isDarkMode: boolean): string { return isDarkMode ? ShanhaiTheme.PANEL_BG : ShanhaiTheme.LIGHT_PANEL_BG; } static textPrimary(isDarkMode: boolean): string { return isDarkMode ? ShanhaiTheme.CREAM : ShanhaiTheme.LIGHT_CREAM; }这种分层解决了两个常见问题一是把“深色”误当作所有区域都用纯黑二是让正文、辅助说明和禁用态共用同一种灰色。山海万灵的深色页面背景、主卡片、抬升卡片和输入表面分别对应不同深度浅色页面也为卡片、替代表面和标签保留独立值。视觉角色深色主题浅色主题使用位置页面外壳深青黑米白整页背景与空白区域内容卡片深色半透明表面暖白表面统计、路线与阅读信息强调信息金色与青绿色褐金与青绿色进度、路线、主操作次级文字低饱和浅青灰绿色说明、计数和辅助状态主题状态从页面入口向下传递主题状态由首页统一持有。用户点击页头的主题控制后页面状态发生一次明确更新首页内容、图鉴、探索、馆长和“我的”模块接收相同的isDarkMode避免局部组件自行缓存旧主题。ShanhaiHomePageContent({ beasts: this.beasts, discoveredCount: this.discoveredIds.length, passportCount: this.passportRegionIds.length, isDarkMode: this.isDarkMode, onToggleTheme: () { this.isDarkMode !this.isDarkMode; } })显式传递比在每个子组件中再次读取全局状态更容易检查。组件的颜色、边框和资源选择都依赖同一布尔值切换时不会出现标题已变色而背景仍停留在旧图的分裂状态。对有选中态的地域卡和护照印章墙主题与业务选中状态保持独立切换外观不会重置发现记录、当前路线或阅读上下文。页头的图标和点击区域同样接收主题状态。太阳与月亮资源随状态切换透明圆形表面使用不同透明度点击事件只通知页面入口更新状态组件本身不保存第二份主题副本。private themeToggleIcon(): Resource { return this.isDarkMode ? $r(app.media.shanhai_toggle_moon_v2) : $r(app.media.shanhai_toggle_sun_v2); } Stack() { Image(this.themeToggleIcon()) .width(46) .height(46) .objectFit(ImageFit.Contain) } .width(54) .height(54) .backgroundColor(this.isDarkMode ? #0CF7EBD3 : #44FFFFFF) .borderRadius(27) .onClick(() { this.onToggleTheme(); })插画资源也要成对选择文化插画不是普通装饰。首页和展厅使用带有山水、云气和神兽的背景它们的明暗关系决定了文本能否被读到。组件根据主题和宽度选择对应资源再让主题令牌负责文字与卡片层级。private panelAsset(): Resource { return this.isDarkMode ? $r(app.media.shanhai_content_panel_dark_v4) : $r(app.media.shanhai_content_panel_light_v4); } .backgroundImage(shanhaiPageBackdropAsset( this.isDarkMode, this.isWideScreen ))这里有两个边界。第一深色资源不是在浅色图片上简单加黑蒙层月色、云纹和远山需要保留可辨识的亮度范围。第二业务内容不能烘焙在插画里。统计数、地域名称、路线进度和按钮仍由 ArkUI 文本与组件绘制因此主题切换、数据刷新和多设备布局不会破坏可访问性。深色主题下背景改为夜色山水和月纹统计卡、金色数字、路线节点与底部导航仍可分辨。切换前后内容数据、地域路线和统计值保持不变变化只发生在主题令牌与对应的插画资源分支。容易被忽略的层级问题深色模式的回归不只检查“有没有换色”。下面三类问题最容易在文化插画页面出现问题表现处理方式文本被纹理吞没地域名、说明和统计标签难以阅读主次文本分别取主题令牌卡片与插画之间保留不透明或半透明表面选中态不明显地图节点和底部导航无法区分当前项选中背景、边框和金色强调同时参与状态表达不只改变文字颜色图片与布局脱节宽屏下背景裁切后遮住内容背景资源选择同时接收主题和宽度内容区域仍按自适应间距布局资源缺失时页面应先保留主题颜色、标题、统计和导航等可操作信息再使用安全的普通表面作为背景不把一张加载失败的插画当成全页不可用。网络同步失败也不应改变用户已经选定的主题页面可以提示数据来源状态同时继续用本地内容完成阅读和探索。验收一次切换要同时检查哪些区域验证时从首页启动后依次观察页头、统计卡、路线图、主操作和底部导航点击主题控制切换一次再确认以下结果页面背景、山水插画和月亮/日间视觉随主题同时变化。标题、说明、金色统计值、地域标签和路线节点仍保持足够对比度。已发现数量、护照印章、知识节点和当前路线不因切换而改变。底部导航的当前项与未选中项仍有可区分的颜色和表面层级。返回其他一级页面后卡片、边框和插画继续使用同一主题状态。统一的主题令牌把颜色选择收拢在可维护的入口成对插画资源解决文化画面在不同亮度下的阅读问题显式状态传递则保证首页与各功能模块在一次主题切换后保持同步。更多 ArkUI 状态管理方式可参考 HarmonyOS 官方状态管理文档。
延伸阅读

更多相关文章

2026/9/20 1:23:07

公司网络为什么要“内外网隔离“?一个被忽视的安全常识

如果你在稍具规模的公司待过,可能遇到过这样的情形:办公电脑能上内部系统、能打印、能共享文件,但想上外网查点资料,却要连另一个网络;或者研发、财务的电脑,压根就不让连互联网。很多人觉得这是 IT 部门"多此一举、故意找麻烦"。但这背后,其实是一条重要的安全设计原…

2026/9/20 21:26:50

金融文本风险评分系统:爬虫+语义打分+可视化全链路实践

简介:本资源是一份面向数据科学学习者与金融行业从业者的Python实战教程包,聚焦金融大数据挖掘与分析全流程能力培养,覆盖从网络爬虫获取数据、清洗建模到可视化呈现的完整链路。压缩包共32个文件,含25个Python源码(如…

2026/9/20 21:26:50

2025年70岁以上老人考驾照三力测试全攻略:题型、流程与备考技巧

简介:面向70岁以上老年驾驶者的2025版驾照三力测试题,系统覆盖记忆力、判断力、多项选择题和判断题四大题型,聚焦交通标志辨识、信号灯含义、车辆灯光使用、安全车速控制、高速公路及山区道路驾驶等高频考点。资源为单个PDF文件,体…

2026/9/20 21:21:50

Phoenix Contexts 入门:用 Elixir 模块封装数据访问与业务逻辑

Phoenix Contexts 入门:用 Elixir 模块封装数据访问与业务逻辑 【免费下载链接】phoenix Peace of mind from prototype to production 项目地址: https://gitcode.com/gh_mirrors/ph/phoenix 本指南介绍 Phoenix 框架的核心设计概念 —— Contexts&#xff…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码