5

我是 Android 开发的新手(使用 Mono for Android),我已经阅读这个这个 和其他一些关于 SO 的问题,但我不确定如何为我的应用程序提供所有必要的图标文件。

  1. 从模板项目中,IDE 为我创建了一个drawable/包含 48x48 像素 Icon.png 文件的文件夹。
  2. 由于我需要提供替代资源,因此我抓取了一个用作我的应用程序图标的 PNG 文件,并使用了Android Asset Studio(在文档中提到),它为我生成了以下文件:

drawable-hdpi/ic_launcher.png(72x72 像素)

drawable-mdpi/ic_launcher.png(48x48 像素)

drawable-xhdpi/ic_launcher.png(96x96 像素)

drawable-xxhdpi/ic_launcher.png(144x144 像素)

(不知道为什么,Android Asset Studio没有生成ldpi版本,所以我给自己调整了一个 36x36 的图标。)

现在我迷路了

drawable-mdpi/1. 我应该在和中都保留一个 48x48 像素的副本drawable/吗?

如果我只在 中保留图标drawable-mdpi/,应用程序是否会在旧设备/Android 版本上崩溃(因为缺少默认资源)?1.如果我只在drawable/(后备)中保留图标,那么使用有什么意义drawable-mdpi/

由于我不确切知道该怎么做,所以我的项目可绘制文件夹如下:

drawable/ic_launcher.png(48x48 像素)

drawable-hdpi/ic_launcher.png(72x72 像素)

drawable-ldpi/ic_launcher.png(36x36 像素)

drawable-mdpi/ic_launcher.png(48x48 像素)

drawable-xhdpi/ic_launcher.png(96x96 像素)

drawable-xxhdpi/ic_launcher.png(144x144 像素)

但对我来说仍然不清楚。


编辑:

如果我提供所有可能的“替代”资源,那么默认 ( drawable/) 资源文件夹将变得多余,因此我可以将其删除。但是我不愿意不提供默认资源,因为相反似乎更合理:首先提供“默认”资源,然后根据需要提供“替代”资源。

4

1 回答 1

6

这句话有点长,但您应该阅读文档对此的说明:

在运行时,系统通过以下过程为任何给定资源确保当前屏幕上的最佳显示效果: 1.系统使用适当的替代资源 根据当前屏幕的大小和密度,系统使用任何大小和应用程序中提供的特定于密度的资源。例如,如果设备具有高密度屏幕并且应用程序请求可绘制资源,则系统会查找与设备配置最匹配的可绘制资源目录。根据可用的其他替代资源,具有 hdpi 限定符的资源目录(例如 drawable-hdpi/)可能是最佳匹配,因此系统使用该目录中的可绘制资源。

2.如果没有匹配的资源可用,系统使用默认资源并根据需要将其放大或缩小以匹配当前屏幕尺寸和密度。“默认”资源是那些没有用配置限定符标记的资源。例如drawable/中的资源就是默认的drawable资源。系统假定默认资源是为基线屏幕尺寸和密度设计的,即正常屏幕尺寸和中等密度。因此,系统会酌情为高密度屏幕向上缩放默认密度资源,为低密度屏幕向下缩放。

但是,当系统在寻找特定密度的资源时,在特定密度的目录中没有找到它,它不会总是使用默认资源。系统可以改为使用其他特定于密度的资源之一,以便在缩放时提供更好的结果。例如,当寻找低密度资源并且它不可用时,系统更倾向于缩减资源的高密度版本,因为系统可以通过以下方式轻松地将高密度资源缩减为低密度与将中等密度资源缩放 0.75 倍相比,0.5 倍,工件更少。

因此,系统将为运行应用程序的任何设备寻找最佳尺寸的可绘制对象。如果系统正在寻找 48x48 的启动器图标,它将首先在 drawable-mdpi/ 中查找,因为文档建议您在该文件夹中放置一个 48x48 图标。既然您已经提供了,那么应用程序没有理由必须在 drawable/ 文件夹中查找默认图像。即使这样做了,也无济于事,因为您已经提供了相同大小的图标。

如果你只提供了一个特定尺寸的drawable,你的应用程序不应该在任何设备上崩溃,即使你提供的尺寸是非常错误的。在这种情况下,图像看起来很糟糕,因为系统将加载您提供的单个图像。所以,如果你在 drawable-*dpi 文件夹中有图像,你就不需要在 drawable/.

TL;博士

不,如果您已经在 drawable-mdpi/ 中找到了 ic_launcher.png 的 48x48 副本,则不需要将 ic_launcher.png 副本放在 drawable 文件夹中,因为系统会首先选择那个。

于 2013-04-11T22:35:12.050 回答