HarmonyOS鸿蒙Next开发应用,图片资源该用几倍图适合。

HarmonyOS鸿蒙Next开发应用,图片资源该用几倍图适合。 有专题性资料么?

比如iOS的应用有设置 @2x等图片来设置图片资源。鸿蒙的应用要如何设置这块。

希望得到真人回答,不要AI味。😄

9 回复

开发者您好,您这边想用二倍图或者是三倍图都是可以的,不限制您这边使用几倍图,当前可使用资源限定词的方式,对资源文件进行标注,与安卓在使用上类似。具体参考下这个文档说明:资源分类与访问

更多关于HarmonyOS鸿蒙Next开发应用,图片资源该用几倍图适合。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


一、鸿蒙应用图片资源的 “倍数图” 规范

鸿蒙不像 iOS 那样直接用 [@2x](/user/2x)/[@3x](/user/3x) 后缀区分倍数,而是通过多分辨率目录 + 自动适配的方式管理图片资源,核心适配的是「像素密度(dpi)」维度,对应不同设备的屏幕分辨率,以下是官方推荐的倍数 / 目录配置:

像素密度区间(dpi) 对应目录名称 等效 iOS 倍数 适配设备场景 图片尺寸基准(以 100×100 基准图为例)
120 ≤ dpi < 160 mdpi @1x 低分辨率入门机型(极少) 100×100
160 ≤ dpi < 240 hdpi @1.5x 入门级手机 / 平板 150×150
240 ≤ dpi < 320 xhdpi @2x 主流中高端手机(最核心) 200×200
320 ≤ dpi < 480 xxhdpi @3x 旗舰手机 / 高清平板 300×300
480 ≤ dpi < 640 xxxhdpi @4x 超高清屏旗舰 / 折叠屏 400×400

关键:鸿蒙会根据设备的 dpi 自动匹配对应目录的图片,若某目录缺失,会从高分辨率目录缩放(如设备是 xhdpi 但无对应图,会取 xxhdpi 图缩放到 2x),或从低分辨率目录拉伸(易模糊)。

二、鸿蒙图片资源的配置方法

1. 目录结构(工程内标准布局)

在鸿蒙应用工程的 src/main/resources/ 目录下,按 dpi 创建子目录,图片按相同名称放入对应目录:

resources/
├── base/                # 基础目录(放非图片资源,如字符串)
├── mdpi/                # 1x图目录
│   └── media/           # 图片统一放media子目录
│       └── icon.png     # 100×100
├── hdpi/                # 1.5x图目录
│   └── media/
│       └── icon.png     # 150×150
├── xhdpi/               # 2x图目录(核心)
│   └── media/
│       └── icon.png     # 200×200
├── xxhdpi/              # 3x图目录
│   └── media/
│       └── icon.png     # 300×300
└── xxxhdpi/             # 4x图目录
    └── media/
        └── icon.png     # 400×400

2. 代码中引用(无需区分倍数)

鸿蒙会自动根据设备 dpi 加载对应目录的图片,代码中只需写图片名称,无需指定倍数:

// Java方式
Image image = new Image();
image.setImageSource(ResourceTable.Media_icon); // 自动匹配dpi对应的icon.png

// ArkTS(ETS)方式
Image('icon') // 直接引用media目录下的icon,自动适配

3. 简化配置

若不想维护多套图,可只保留 xhdpi(2x)xxhdpi(3x) 两套(覆盖 95% 以上设备),鸿蒙会自动缩放适配其他 dpi 设备;超高清屏(xxxhdpi)可按需补充,避免拉伸模糊。

三、专题性官方资料

华为开发者联盟提供了完整的图片资源设计 / 开发规范,以下是核心资料链接和重点:

1. 核心规范文档(必看)

2. 补充说明

  • 图片格式推荐:优先使用 WebP(体积小、画质高),其次 PNG(透明背景)、JPG(实景图);
  • 矢量图替代:简单图标(如按钮、logo)推荐用 SVG/Vector Vector Graphic(矢量图),无需适配倍数,自动缩放无模糊;
  • 自适应布局:结合鸿蒙的 dp 单位(而非 px),图片尺寸用 dp 定义,配合多分辨率图,实现跨设备统一视觉效果。

四、和 iOS 的核心区别总结

维度 iOS 鸿蒙
区分方式 文件名后缀(@2x 目录区分(xhdpi/xxhdpi)
核心适配维度 屏幕倍率(@1x/@2x 像素密度(dpi)
引用方式 需指定后缀(或自动) 统一名称,自动匹配目录
简化方案 只做 @2x/@3x 优先 2x(xhdpi)+3x(xxhdpi)

建议用4倍,但是展示时需要注意实际的像素大小,会随屏幕密度而转换。

比如,4倍图,在屏幕密度为2 的设备上,实际展示的大小像素会*2 (4倍图 / 屏幕密度2)

爱用几倍就几倍,不违反UX设计就行

懒人包:用3X图。

总的来说,HarmonyOS是一款非常优秀的操作系统,期待它能在未来带给我们更多惊喜!

华为Mate 60的屏幕分辨率为FHD+ 2688x1216像素,对标苹果iPhone 17 2622x1206像素。

而苹果17使用的是三倍资源图片,所以,华为开发中推荐使用三倍图。

但是它不像iOS中使用@2x @3x区分几倍图哦~~~

美工出图的时候按照Mate 60屏幕分辨率设计就行了~~~ 或者直接用iPhone 17的设计图,因为差不了几个像素。

最简单是办法就是直接拿iOS的三倍图直接使用就OK了~~

HarmonyOS应用开发中,图片资源建议采用2倍图(@2x)作为基准。系统会根据设备屏幕密度自动适配。对于需要高清晰度的场景,可补充提供3倍图(@3x)。资源应放置在项目的resources目录下对应的baseldpimdpihdpixhdpi等密度限定词子目录中,由系统自动选择加载。

在HarmonyOS Next应用开发中,处理图片资源(多倍图)的核心原则是基于屏幕密度(screen density)进行适配,这与iOS的@2x@3x思路相似,但具体实现和目录结构有所不同。

1. 核心概念:屏幕密度等级

HarmonyOS定义了不同的屏幕密度等级,并为每个等级建议了基准的缩放比例。开发时,你需要为不同的密度等级提供对应的图片资源。

目前主要的密度等级(与Android的mdpi、hdpi、xhdpi等概念对应,但具体数值和名称是HarmonyOS定义的)包括:

  • sdpi: 缩放基准约为0.75(小尺寸低密度屏幕,现已较少见)
  • mdpi: 缩放基准为1.0(基准密度,作为设计参考)
  • ldpi: 缩放基准约为1.5(常见于标准密度屏幕)
  • hdpi: 缩放基准约为2.0(高密度屏幕,如多数旗舰机)
  • xhdpi: 缩放基准约为3.0(超高密度屏幕)
  • xxhdpi: 缩放基准约为4.0(超超高密度屏幕)

简单来说,你可以将 mdpi 视为 1xhdpi 视为 2xxhdpi 视为 3x,以此类推。

2. 资源目录结构

在HarmonyOS Next项目的 resources 目录下,你需要按照以下结构放置图片资源:

resources/
├── base/
│   ├── media/           (这里放置通用或fallback资源,非必须)
│   └── ...
├── en_US/               (英文资源)
├── zh_CN/               (中文资源)
└── **{密度限定符}**/      (核心:按密度分类的图片资源目录)
    └── media/
        └── icon.png

关键的 {密度限定符} 目录命名规则如下:

  • ldpi/: 对应 ldpi 密度资源
  • mdpi/: 对应 mdpi 密度资源(可视为1倍图基准)
  • hdpi/: 对应 hdpi 密度资源(可视为2倍图)
  • xhdpi/: 对应 xhdpi 密度资源(可视为3倍图)
  • xxhdpi/: 对应 xxhdpi 密度资源(可视为4倍图)

示例: 如果你有一个图标 icon.png,你应当准备多个版本,并放入对应目录:

  • resources/ldpi/media/icon.png (1.5倍尺寸,如果设计稿以mdpi为基准,则这里放1.5倍大小的图)
  • resources/mdpi/media/icon.png (1倍尺寸,基准图)
  • resources/hdpi/media/icon.png (2倍尺寸)
  • resources/xhdpi/media/icon.png (3倍尺寸)
  • resources/xxhdpi/media/icon.png (4倍尺寸)

3. 设计稿与切图建议

  1. mdpi 作为设计基准: 在UI设计时,建议以 mdpi(1x)下的逻辑像素尺寸进行设计。例如,一个图标的显示区域希望是 48x48 逻辑像素。

  2. 导出多倍图: 根据上述密度等级,导出对应物理像素尺寸的图片。

    • mdpi (1x): 48px × 48px
    • hdpi (2x): 96px × 96px
    • xhdpi (3x): 144px × 144px
    • xxhdpi (4x): 192px × 192px
    • ldpi (1.5x): 72px × 72px,可根据目标设备覆盖情况决定是否提供)
  3. 在代码或XML中引用: 引用资源时,只需使用基础名称(如 icon,系统会根据当前运行设备的屏幕密度,自动从匹配的 {密度限定符} 目录下选择最合适的图片。

    <Image
        ohos:width="48vp"
        ohos:height="48vp"
        ohos:image_src="$media:icon" />
    
    // ArkTS示例
    Image($r('app.media.icon'))
        .width(48)
        .height(48)
    

4. 实践要点

  • 必须提供 mdpi 资源mdpi 目录下的资源是必须的,它作为基准和回退选项。
  • 系统自动匹配: 你不需要在代码中判断设备密度。系统会自动选择最接近设备密度的资源目录中的图片。如果精确匹配的目录不存在,系统会寻找最接近的密度目录,并缩放图片,但这可能影响效果和性能。
  • 覆盖主流密度: 为了获得最佳显示效果,建议至少提供 mdpihdpixhdpi 这三个主流密度的资源。xxhdpi 对于高端设备或折叠屏的某些场景也很重要。
  • 使用 .webp 格式: 强烈建议使用 .webp 格式替代 .png,以显著减少应用包体积。HarmonyOS 原生支持 .webp

总结: HarmonyOS Next应用图片资源适配,本质是为 resources/ 下的不同 {密度限定符}(如 mdpi/, hdpi/, xhdpi/)目录提供不同物理尺寸的图片。设计时以 mdpi (1x) 为基准进行逻辑尺寸设计,然后按比例导出 2x, 3x, 4x 的图片放入对应目录。在代码中统一使用资源名引用,系统自动完成适配。 这与iOS的 image.png, image[@2x](/user/2x).png, image[@3x](/user/3x).png 放在同一目录下的方式不同,但原理相通。

回到顶部