HarmonyOS 鸿蒙Next中如何搞分层图标

HarmonyOS 鸿蒙Next中如何搞分层图标 分层图标怎么搞啊,有赏,要详细的,谢谢cke_867.png


更多关于HarmonyOS 鸿蒙Next中如何搞分层图标的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

背景知识:

  • 配置分层图标:应用图标如果采用分层图标(包括前景图和背景图两层),可以参考本文档进行配置。图标规范详见图标资源规范。
  • 配置优先级和生成策略:图标和标签通常一起配置,对应app.json5配置文件和module.json5配置文件中的icon和label标签。系统将优先返回module.json5中的icon与label,如果在module.json5配置文件的abilities标签中未设置icon和label,系统将返回app.json5中的icon和label。
  • 前景图背景图:在HarmonyOS应用开发中,前景图(Foreground)和背景图(Background)是应用图标的分层设计概念,用于满足UX设计规范中的视觉一致性要求。
  • 前景图:通常是应用图标的主体部分,例如应用的主要图形、Logo或文字,需为透明的PNG格式。
  • 背景图:作为背景层,需为纯色(不能透明且不能包含其他图形),用于与前景图叠加形成完整的应用图标。具体请参考:通用应用 UX 体验标准。

问题解决:

cke_2278.png

cke_2693.png

注意:icon_background 背景 icon_foreground前景图

更多关于HarmonyOS 鸿蒙Next中如何搞分层图标的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


为啥我搞完之后进入软件的遮罩就是我制作的图标,结果桌面图标是默认的? cke_1063.png

楼主,你看看你的 module.json5 下的 abilities-icon 是如何配置的?

开发者您好,新建项目时预置了默认的分层图标,您可以基于原图标进行修改,参考:

关于如何修改应用图标

你截图里要求的“分层图标”,指的是 HarmonyOS 应用图标不是一张 png,而是 前景图(foreground)+ 背景图(background) 两层组合的图标资源(并且审核要求你提供 1024×1024 的高分辨率源图)。

下面给你一套“从素材准备 → DevEco 生成 → 工程配置 → 常见踩坑”的完整流程(按这个做基本一次过)。


一、先准备两张 1024×1024 的素材(这是关键)

1)前景图 foreground(必须带透明通道)

  • PNG,1024×1024
  • 只放 Logo/主体图形,背景透明
  • 不要把整张画布留很多透明边(审核经常要求“不要人为留白/不要加间距”)

2)背景图 background(建议纯色或不透明背景)

  • PNG,1024×1024
  • 建议用纯色或纹理底图(一般不需要透明)

你截图里强调的点:1024×1024、不要在资源内加间距、不要自己裁切搞出不规则留白——这通常是为了后续系统在不同形状/圆角/动效里做统一处理。


二、用 DevEco Studio 直接生成分层图标(推荐,最省事)

DevEco 有一个 “Image Asset” 向导可以把你的 1024 源图生成到资源目录,并自动帮你组织多密度产物。

操作路径(大致一致):

  1. 在工程中右键:
    • 如果你要给 模块(entry) 配 icon:在 entry 目录右键
    • 如果你要给 AppScope(应用级) 配 icon:在 AppScope 目录右键
  2. 选择:New > Image Asset
  3. 在向导里填写:
    • Name:例如 layered_image(不要中文)
    • Foreground Layer:选择你的前景 1024 PNG(可调整 Trim/Resize)
    • Background Layer:选择背景(Color 或 Image)
  4. Next → Finish

DevEco 会把资源生成到 resources/.../media 下,并给你生成对应的图标资源文件与多密度图。

这个向导的说明里也写了前景/背景层、推荐 1024×1024 等配置项。
Sources: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-apply-generated-icon-V14


三、手动配置分层图标(你想完全可控时用)

如果你不想用向导,也可以手工按官方格式做。

方式 A:在 AppScope 配(应用级图标)

  1. 放文件到:
    • AppScope/resources/base/media/foreground.png
    • AppScope/resources/base/media/background.png
  2. 新建分层图标描述文件,例如:
    • AppScope/resources/base/media/layered_image.json

内容如下(重点是 layered-image 结构):

{
  "layered-image": {
    "background": "$media:background",
    "foreground": "$media:foreground"
  }
}
  1. AppScope/app.json5 引用它:
{
  "app": {
    "icon": "$media:layered_image",
    "label": "$string:app_name"
  }
}

方式 B:在 entry 模块配(UIAbility 图标)

同理,把 foreground.png/background.png/layered_image.json 放到:

  • entry/src/main/resources/base/media/

然后在 entry/src/main/module.json5 里对入口 UIAbility 配:

"abilities": [
  {
    "icon": "$media:layered_image",
    "label": "$string:EntryAbility_label",
    "skills": [
      {
        "entities": ["entity.system.home"],
        "actions": ["ohos.want.action.home"]
      }
    ]
  }
]

官方对“如何配置分层图标(app.json5/module.json5)+ layered_image.json 格式”有完整说明。
Sources: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/layered-image


四、为什么你“改了 app.json5 还是不生效”?(配置优先级坑)

很多人踩坑在这里:入口 UIAbility 的 icon/label 优先级通常高于 app.json5
也就是说:

  • 你如果在 module.json5 的入口 UIAbility 里写了 icon,系统可能就用 UIAbility 的;
  • 只有当 UIAbility 没配(或入口判断不成立)时,才回落用 app.json5

五、审核/上架常见失败点(按你的截图要求特别提醒)

  • 源图必须 1024×1024(前景/背景都建议是)
  • 不要人为加留白:主体过小、四周透明边太大容易被判“不符合规范”
  • 前景必须透明 PNG(否则分层没意义)
  • 文件名遵守资源命名规范(字母/数字/下划线/点,不要中文/空格)

这个优先级在官方文档里也有说明(多 HAP、多入口时的取值规则)。
Sources: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/layered-image


打开iconkitchen网站,生成你想要的icon,将AppScope->resources->base->media下的foreground.png替换为你iconkitchen网站生成的图标,保持文件名称不变就行了;如果设置不生效看下是否有重复设置,检查entry->src->main->module.json5里是否重复设置了icon和label,注释掉这二行就行了。

配置分层图标和应用名称

  • 方式一:配置app.json5 该配置仅当module.json5配置文件中无UIAbility、或者存在UIAbility但abilities标签中未设置icon和label(可手动删除icon和label配置)时生效。
    1. 将前景资源和背景资源文件放在“AppScope\resources\base\media”文件夹下。 本例中,前景资源文件名为“foreground.png”,背景资源文件名为“background.png”。
    2. 在“AppScope\resources\base\media”文件夹下app_layered_image.json分层图标资源文件中,配置分层图标的前景资源与背景资源信息。
      {
        "layered-image":
        {
          "background" : "$media:background",
          "foreground" : "$media:foreground"
        }
      }
      
    3. app.json5配置文件中引用分层图标资源文件。示例如下:
      {
        "app": {
          // ...
          "icon": "$media:layered_image",
          "label": "$string:app_name" // 需要在AppScope/resources/base/element/string.json配置name为app_name的资源,已存在可以忽略
        }
      }
      
  • 方式二:配置module.json5
    1. 将前景资源和背景资源文件放在“entry\src\main\resources\base\media”文件夹下。 本例中采用的前景资源和背景资源的文件名分别为“foreground.png”和“background.png”。
    2. 在“entry\src\main\resources\base\media”文件夹下layered_image.json分层图标资源文件中,配置分层图标的前景资源与背景资源信息。
      {
        "layered-image":
        {
          "background" : "$media:background",
          "foreground" : "$media:foreground"
        }
      }
      
    3. 如果需要在桌面显示UIAbility图标,除了需要配置icon与label字段,还需要在skills标签下面的entities中添加"entity.system.home"、actions中添加"ohos.want.action.home"。
      {
        "module": {
          // ...
          "abilities": [
            {
              // ...
              // icon配置为分层图标资源文件的索引
              "icon": "$media:layered_image",
              // 需要在entry/src/main/resources/base/element/string.json配置name为EntryAbility_label的资源,已存在可以忽略
              "label": "$string:EntryAbility_label",
              "skills": [
                {
                  "entities": [
                    "entity.system.home"
                  ],
                  "actions": [
                    "ohos.want.action.home"
                  ]
                }
              ]
            }
          ],
          // ...
        }
      }
      

参考:应用配置图标不符合UX设计规范该如何解决

让UI切给你前景图后景图,项目中配置下就可以了

您好,可以将图片背景和元素进行分离后,分别导出为png格式,前景图即元素背景透明。

然后修改两张图片的名称为配置文件中的名称即可。

在HarmonyOS Next中,分层图标需准备前景层(icon_foreground.png)与背景层(icon_background.png),置于 resources/base/media/。在 module.json5application 节点下,配置 icon"$media:icon_foreground",并新增 iconBackground 字段为 "$media:icon_background"。系统自动合成自适应分层效果。若要求圆形裁剪,可进一步配置 adaptiveIcon

在HarmonyOS Next中,实现分层图标(Adaptive Icon)需要为应用提供前景和背景两张图层,并通过 profile 资源进行配置,系统会自动在不同设备上裁剪成合适的形状。

操作步骤:

  1. 准备图片:在 src/main/resources/base/media 下放置 前景图icon_foreground.png,带透明区域)和 背景图icon_background.png)。

  2. 创建分层图标描述文件:在 src/main/resources/base/profile 下新建 adaptive_icon.json,内容如下:

{
  "layered-image": {
    "background": "$media:icon_background",
    "foreground": "$media:icon_foreground"
  }
}
  1. 引用分层图标:打开 module.json5,将 abilities 下的 iconstartWindowIcon 改为引用 $profile:adaptive_icon。示例:
{
  "module": {
    "abilities": [
      {
        "name": "EntryAbility",
        "icon": "$profile:adaptive_icon",
        "startWindowIcon": "$profile:adaptive_icon",
        ...
      }
    ]
  }
}

配置完成后,系统会根据桌面形状自动叠加并裁剪图标,无需手动适配圆形、方形等蒙版。

回到顶部