我是Android开发的新手(使用Mono for Android),我在这里阅读了this,this this和其他questions我不确定如何为我的应用程序提供所有必需的Icon文件。
drawable/
文件夹。 drawable-hdpi/ic_launcher.png
(72x72像素)
drawable-mdpi/ic_launcher.png
(48x48像素)
drawable-xhdpi/ic_launcher.png
(96x96像素)
drawable-xxhdpi/ic_launcher.png
(144x144 px)
(我不知道为什么,但Android Asset Studio没有生成ldpi
版本,因此我将自己调整为36x36图标。)
现在我迷路了
1。我应该在drawable-mdpi/
和drawable/
中保留48x48像素的副本吗?
如果我只在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 px)
但我现在还不清楚。
修改
如果我提供所有可能的“替代”资源,则默认(drawable/
)资源文件夹将变为冗余,因此我可以将其删除。但是我不愿意提供默认资源,因为做相反的事情似乎更合理:首先提供“默认”资源,然后根据需要提供“替代”资源。
答案 0 :(得分:6)
这个引用有点长,但你应该阅读documentation对此有何看法:
在运行时,系统确保在当前屏幕上以最佳方式显示任何给定资源的以下过程: 1.系统使用适当的替代资源 根据当前屏幕的大小和密度,系统使用应用程序中提供的任何特定大小和密度的资源。例如,如果设备具有高密度屏幕并且应用程序请求可绘制资源,则系统会查找与设备配置最匹配的可绘制资源目录。根据可用的其他备用资源,具有hdpi限定符的资源目录(例如drawable-hdpi /)可能是最佳匹配,因此系统使用此目录中的可绘制资源。
2.如果没有匹配的资源,系统会使用默认资源并根据需要向上或向下扩展以匹配当前资源 屏幕大小和密度“默认”资源是那些资源 没有用配置限定符标记。例如,资源 在drawable /中是默认的可绘制资源。系统假定 默认资源是为基线屏幕大小而设计的 密度,这是正常的屏幕尺寸和中等密度。因此, 系统将默认密度资源扩展为高密度 适当时,屏幕和向下用于低密度屏幕。
但是,当系统正在寻找密度特定的资源时 并且没有在密度特定的目录中找到它,它不会 始终使用默认资源。系统可以改为使用其中之一 其他密度特定的资源,以提供更好的 缩放时的结果。例如,在寻找低密度时 资源,它不可用,系统更喜欢按比例缩小 高密度版本的资源,因为系统很容易 将高密度资源缩小到低密度0.5倍, 与通过缩放中密度资源相比,具有更少的工件 因子0.75。
因此,系统将为运行应用程序的任何设备寻找最佳尺寸的drawable。如果系统正在寻找48x48的启动器图标,它将以drawable-mdpi / first显示,因为文档建议您在该文件夹中放置一个48x48图标。既然你已经提供了,那么应用程序就没有必要在drawable /文件夹中查找默认图像。即使它确实如此,也不会有益,因为你已经提供了相同大小的图标。
如果您提供的只是一个特定的可绘制尺寸,即使您提供的尺寸非常错误,您的应用也不会在任何设备上崩溃。在这种情况下,图像看起来很糟糕,因为系统会加载您提供的单个图像。所以,如果你有drawable- * dpi文件夹中的图像,你将不需要一个drawable /.的副本。
TL; DR
不,如果你已经在drawable-mdpi /中有一个,那么你不需要在drawable文件夹中放入48x48的ic_launcher.png副本,因为系统会先选择那个。