Open Harmony 高端精致:资源文件 string、float、color 的统一管理实践 ✨

前言 🌟

一个应用是否精致,不只看页面有没有动画,也看文字、字号、颜色是否统一。OpenHarmony / HarmonyOS 项目提供了资源目录,用来管理字符串、尺寸、颜色、媒体等内容。

当前项目中已经存在:

  1. string.json
  2. float.json
  3. color.json
  4. dark/element/color.json

本文基于当前项目真实资源配置,分析资源统一管理在高端精致体验中的作用。

本文对应四大主题中的 高端精致

字符串资源 string.json 📦

应用级字符串资源位于:

AppScope/resources/base/element/string.json

当前内容是:

{
  "string": [
    {
      "name": "app_name",
      "value": "xiaohongshu"
    }
  ]
}

这里定义了应用名称 app_name,并在 app.json5 中使用:

"label": "$string:app_name"

模块级字符串资源位于:

entry/src/main/resources/base/element/string.json

其中包含:

{
  "name": "EntryAbility_label",
  "value": "label"
}

当前模块字符串仍然比较模板化,例如 descriptionlabel。这说明项目还处于基础工程阶段,后续可以替换成更贴合应用定位的文案。

float.json:字号资源化 🎨

当前项目中有:

{
  "float": [
    {
      "name": "page_text_font_size",
      "value": "50fp"
    }
  ]
}

首页 Index.ets 中引用了它:

.fontSize($r('app.float.page_text_font_size'))

这说明当前页面没有直接把字号硬编码成某个数字,而是通过资源引用。

这种方式有几个好处:

  1. 字号集中管理。
  2. 多页面复用更方便。
  3. 后续调整视觉风格更容易。
  4. 代码中减少魔法数字。

当前项目只有一个字号资源,但已经体现了资源化意识。

字号资源和页面显示的关系 🔗

当前首页中最直接的资源引用就是:

.fontSize($r('app.float.page_text_font_size'))

这说明 float.json 里的 page_text_font_size 会影响首页文本显示。也就是说,资源文件不是“放在那里不用的配置”,它已经参与页面渲染。

如果后续调整 page_text_font_size 的值,首页文字大小就可以跟着变化。对于写文章来说,这个点很适合说明资源管理的实际价值:修改视觉参数不一定要改 ArkTS 页面代码。

color.json:颜色资源管理 🌈

基础颜色文件位于:

entry/src/main/resources/base/element/color.json

内容是:

{
  "color": [
    {
      "name": "start_window_background",
      "value": "#FFFFFF"
    }
  ]
}

深色资源位于:

entry/src/main/resources/dark/element/color.json

内容是:

{
  "color": [
    {
      "name": "start_window_background",
      "value": "#000000"
    }
  ]
}

这说明项目已经把启动窗口背景放入颜色资源,并为 dark 场景准备了对应值。

需要注意:当前项目只是配置了启动窗口背景色,还没有形成完整的页面颜色体系。文章中应该说“具备资源分层基础”,不要写成“已经完成完整深色模式适配”。

base 和 dark 的分层意义 🌗

当前项目同时存在:

resources/base/element/color.json
resources/dark/element/color.json

这体现了资源分层思想。base 是基础资源,dark 是深色场景下的覆盖资源。当前两个文件都定义了 start_window_background,只是颜色值不同。

这种结构给后续主题适配留下了空间。比如未来增加 text_primary,就可以在 base 中定义浅色文字颜色,在 dark 中定义深色模式下的文字颜色。

当前项目还没有把首页文字颜色资源化,所以这里只能说“具备资源分层基础”。这种表述既真实,也能体现项目后续方向。

资源引用比硬编码更适合长期维护 ✅

当前项目的写法:

.fontSize($r('app.float.page_text_font_size'))

比直接写:

.fontSize(50)

更适合长期维护。

原因是页面越来越多以后,硬编码会带来几个问题:

  1. 同一个字号散落在多个页面。
  2. 调整视觉规范时需要全局搜索。
  3. 不同页面容易出现细微不一致。
  4. 明暗主题扩展更困难。

资源化管理可以让设计规范逐步沉淀下来。

当前资源还比较基础 📌

当前项目的资源数量并不多,这是事实。string.json 中还有 module descriptiondescriptionlabel 这类模板文案,float.json 只有一个字号,color.json 也主要服务于启动背景。

但这不影响它作为文章主题。因为这篇文章的重点不是说项目已经有完整设计系统,而是说明项目已经开始使用资源化管理。基础阶段把资源目录和引用方式讲清楚,后续扩展页面时就不会到处硬编码。

这也是“高端精致”的真实落点:先统一资源,再谈复杂视觉。

和高端精致主题的关系 ✨

高端精致并不是把页面做得很花,而是体验一致、层级清楚、视觉稳定。

当前项目中的资源文件虽然少,但已经覆盖:

  1. 应用名称。
  2. Ability 文案。
  3. 页面文字字号。
  4. 启动背景颜色。
  5. 深色启动背景颜色。

这些都属于视觉和体验基础。

后续可以如何扩展?🚀

如果继续完善项目,可以增加更多资源:

page_background
text_primary
text_secondary
card_background
brand_primary
spacing_small
spacing_medium
radius_card

这些目前不是项目已有内容,只是后续建议。

如果未来要做小红书风格内容流页面,资源体系会非常重要。卡片背景、标题字号、昵称颜色、点赞颜色、底部导航状态,都可以逐步资源化。

写资源类文章要注意真实性 ✅

当前项目能真实展示的是资源管理“起点”,不是完整设计系统。因此文章中最好多使用“基础配置”“后续扩展”“资源化意识”这类表述。

这样既不会夸大项目,也能让读者看到价值:即使是一个简单首页,也可以从一开始就把字符串、字号、颜色放到正确位置,为后续页面扩展做准备。

总结 🌈

这篇文章对应 高端精致 方向。

当前项目已经具备基础资源管理:

  1. string.json 管理应用和模块文案。
  2. float.json 管理页面字号。
  3. color.json 管理启动窗口背景。
  4. dark/element/color.json 提供深色资源基础。
  5. Index.ets 通过 $r() 引用字号资源。

资源文件不是简单配置,它是视觉一致性和工程可维护性的基础。OpenHarmony 应用想做得更精致,应该从字符串、字号、颜色这些小地方开始统一。

img

img

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐