HarmonyOS 鸿蒙Next中如何搞分层图标
HarmonyOS 鸿蒙Next中如何搞分层图标
分层图标怎么搞啊,有赏,要详细的,谢谢
更多关于HarmonyOS 鸿蒙Next中如何搞分层图标的实战教程也可以访问 https://www.itying.com/category-93-b0.html
背景知识:
- 配置分层图标:应用图标如果采用分层图标(包括前景图和背景图两层),可以参考本文档进行配置。图标规范详见图标资源规范。
- 配置优先级和生成策略:图标和标签通常一起配置,对应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 体验标准。
问题解决:


注意:icon_background 背景 icon_foreground前景图
更多关于HarmonyOS 鸿蒙Next中如何搞分层图标的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
为啥我搞完之后进入软件的遮罩就是我制作的图标,结果桌面图标是默认的? 
楼主,你看看你的 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 源图生成到资源目录,并自动帮你组织多密度产物。
操作路径(大致一致):
- 在工程中右键:
- 如果你要给 模块(entry) 配 icon:在
entry目录右键 - 如果你要给 AppScope(应用级) 配 icon:在
AppScope目录右键
- 如果你要给 模块(entry) 配 icon:在
- 选择:New > Image Asset
- 在向导里填写:
- Name:例如
layered_image(不要中文) - Foreground Layer:选择你的前景 1024 PNG(可调整 Trim/Resize)
- Background Layer:选择背景(Color 或 Image)
- Name:例如
- Next → Finish
DevEco 会把资源生成到 resources/.../media 下,并给你生成对应的图标资源文件与多密度图。
这个向导的说明里也写了前景/背景层、推荐 1024×1024 等配置项。
Sources: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-apply-generated-icon-V14
三、手动配置分层图标(你想完全可控时用)
如果你不想用向导,也可以手工按官方格式做。
方式 A:在 AppScope 配(应用级图标)
- 放文件到:
AppScope/resources/base/media/foreground.pngAppScope/resources/base/media/background.png
- 新建分层图标描述文件,例如:
AppScope/resources/base/media/layered_image.json
内容如下(重点是 layered-image 结构):
{
"layered-image": {
"background": "$media:background",
"foreground": "$media:foreground"
}
}
- 在
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配置)时生效。
- 将前景资源和背景资源文件放在“AppScope\resources\base\media”文件夹下。 本例中,前景资源文件名为“foreground.png”,背景资源文件名为“background.png”。
- 在“AppScope\resources\base\media”文件夹下app_layered_image.json分层图标资源文件中,配置分层图标的前景资源与背景资源信息。
{ "layered-image": { "background" : "$media:background", "foreground" : "$media:foreground" } } - 在app.json5配置文件中引用分层图标资源文件。示例如下:
{ "app": { // ... "icon": "$media:layered_image", "label": "$string:app_name" // 需要在AppScope/resources/base/element/string.json配置name为app_name的资源,已存在可以忽略 } }
- 方式二:配置module.json5
- 将前景资源和背景资源文件放在“entry\src\main\resources\base\media”文件夹下。 本例中采用的前景资源和背景资源的文件名分别为“foreground.png”和“background.png”。
- 在“entry\src\main\resources\base\media”文件夹下layered_image.json分层图标资源文件中,配置分层图标的前景资源与背景资源信息。
{ "layered-image": { "background" : "$media:background", "foreground" : "$media:foreground" } } - 如果需要在桌面显示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" ] } ] } ], // ... } }
让UI切给你前景图后景图,项目中配置下就可以了
您好,可以将图片背景和元素进行分离后,分别导出为png格式,前景图即元素背景透明。
然后修改两张图片的名称为配置文件中的名称即可。
在HarmonyOS Next中,分层图标需准备前景层(icon_foreground.png)与背景层(icon_background.png),置于 resources/base/media/。在 module.json5 的 application 节点下,配置 icon 为 "$media:icon_foreground",并新增 iconBackground 字段为 "$media:icon_background"。系统自动合成自适应分层效果。若要求圆形裁剪,可进一步配置 adaptiveIcon。
在HarmonyOS Next中,实现分层图标(Adaptive Icon)需要为应用提供前景和背景两张图层,并通过 profile 资源进行配置,系统会自动在不同设备上裁剪成合适的形状。
操作步骤:
-
准备图片:在
src/main/resources/base/media下放置 前景图(icon_foreground.png,带透明区域)和 背景图(icon_background.png)。 -
创建分层图标描述文件:在
src/main/resources/base/profile下新建adaptive_icon.json,内容如下:
{
"layered-image": {
"background": "$media:icon_background",
"foreground": "$media:icon_foreground"
}
}
- 引用分层图标:打开
module.json5,将abilities下的icon和startWindowIcon改为引用$profile:adaptive_icon。示例:
{
"module": {
"abilities": [
{
"name": "EntryAbility",
"icon": "$profile:adaptive_icon",
"startWindowIcon": "$profile:adaptive_icon",
...
}
]
}
}
配置完成后,系统会根据桌面形状自动叠加并裁剪图标,无需手动适配圆形、方形等蒙版。

