在android中有res / drawable-ldpi吗?

时间:2013-06-06 17:14:12

标签: android resources drawable screen-resolution android-resources

我正在努力理解http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources,我想知道是否有一点既有drawable又有drawable-ldpi?我问的原因是因为我从不同的例子中复制了一些我的drawables。我有来自Holo主题的图标,在drawable-mdpi,drawable-hdpi,drawable-xhdpi中,但启动器图标也存在于drawable-ldpi中(但是drawable-ldpi中没有其他文件)。我还有一些只存在于drawable目录中的自定义drawable。

以下是一个例子:

res/drawable/x.png
res/drawable-ldpi/ic_launcher.png
res/drawable-mdpi/ic_launcher.png
res/drawable-mdpi/ic_download.png
res/drawable-hdpi/ic_launcher.png
res/drawable-hdpi/ic_download.png
res/drawable-xhdpi/ic_launcher.png
res/drawable-xhdpi/ic_download.png
res/drawable-xxhdpi/ic_launcher.png

我是否正确理解这是一个错误的配置,好像我的应用程序碰巧在ldpi设备上运行它会崩溃,因为它缺少ic_download drawable?那么正确的解决方案是什么?我是否必须将所有可绘制的内容调整为ldpi?或者我应该将最小的现有版本的EACH drawable添加到drawables /安全吗?

5 个答案:

答案 0 :(得分:17)

只有10%的设备是ldpi,而且这个数字会随着时间的推移而减少。资料来源:http://developer.android.com/about/dashboards/index.html

不需要有所有密度的图像,只有一个是足够的。系统将在需要时向上/向下扩展。因此,最好的方法是支持最高密度的图像(xhdpi或xxhdpi)。

我个人只使用xhdpi图片!


如果您将所有图像放在xhdpi文件夹中,该应用程序将不会因其他密度上缺少图像而崩溃。对于所有其他密度,图像将调整为较小的尺寸,因此不会失去其特性。

当您为每个分辨率创建不同的图像而不仅仅是调整大小时,Google的建议很有用。示例:ldpi icon(36x36)=只有一个简单的棒球/ xhdpi图标(96x96)=棒球击打棒球

还有一个细节,如果您将图像放在默认文件夹(mdpi)上,它会将xldpi设备的图像缩放2倍,您可能会遇到OOM问题。如果将图像放在xhdpi文件夹上,它会将其缩小一半。

在实践中它不是必需的,但如果您想要(非常?)小的性能改进并且您不介意更大的APK,您可以添加它们。

答案 1 :(得分:1)

在ldpi设备中,如果在drawable-ldpi文件夹中找不到合适的drawable,你的应用程序将从drawable文件夹中检索drawable,但是如果drawables太大,它可能会导致OutOfMemoryError。这就是为什么你应该使用drawable-ldpi文件夹和正确调整大小的drawables。

答案 2 :(得分:1)

当Eclipse创建启动器图标时,它只为mdpi,hdpi,xhdpi和xxhdpi创建它们。基于此,我认为不需要创建ldpi图标,并且mdpi将自动缩小

答案 3 :(得分:1)

让我解释一下文件夹的层次结构究竟是如何工作的,以及为什么在正确的文件夹中设置正确的图像很重要。

android选择文件的方式是基于运行应用程序密度像素的设备,它将从该密度(例如hdpi)开始,如果它没有找到那里的资源,它将沿着整个层次结构运行,直到“默认”drawable,你可能会丢失不同密度文件夹中的资源,操作系统不会抱怨,但如果在默认文件夹中找不到资源,那么操作系统会让你知道有问题,有些难以找到与此问题相关的错误,让我举一个例子,假设你只有一个资源在drawable-hdpi文件夹中,编译器不会抱怨,因为这是一个具有你指定的ID的资源,如果你在hdpi设备上运行应用程序就赢了没有任何问题,但是如果应用程序在ldpi设备上运行,应用程序将崩溃,因为操作系统将尝试在ldpi文件夹上找到它然后默认情况下它们都不会包含导致崩溃的资源,这就是为什么大多数人只是跳过该部分并将所有内容设置为“drawable”(默认文件夹),b因为操作系统总能在那里找到它,无论你正在使用什么密度,但是重要的一点是,当你没有合适的像素密度资源时,操作系统本身会尝试要仅仅因为计算而对大量内存中发现的唯一资源进行“调整大小”,在其中一个项目中我没有适当的资源来处理正确的像素密度导致OutOfMemoryError,因为操作系统正在调整所有资产为其他行动留下的空间很小......

问候!

答案 4 :(得分:0)

对于它的价值,如果你看一下KitKat的AOSP源代码,一些内置应用程序就不再拥有LDPI资源了。所以,据我所知,不再需要它们了。