在android中使用res/drawable-ldpi有意义吗?

sr4lhrrt  于 2022-12-25  发布在  Android
关注(0)|答案(6)|浏览(141)

I'm trying to understand http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources and I wonder if there's a point having both drawable and drawable-ldpi? The reason I ask is because I copied some of my drawables from different examples. I have the icons from Holo theme in drawable-mdpi, drawable-hdpi, drawable-xhdpi, but the launcher icon exists also in drawable-ldpi (however there are no other files in drawable-ldpi). I also have a couple of custom drawables that only exist in drawable directory.
下面是一个例子:

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可绘制对象?那么正确的解决方案是什么?我是否必须将所有可绘制对象的大小调整为ldpi?或者我是否应该将每个可绘制对象的最小现有版本添加到drawables/以确保安全?

niwlg2el

niwlg2el1#

只有10%的设备采用了ldpi,而且这一数字还在不断下降。http://developer.android.com/about/dashboards/index.html
不需要所有密度的图像,只要一个就足够了。系统会在需要时将其放大/缩小。因此,最好的方法是使用支持的最高密度的图像(xhdpi或xxhdpi)。
我个人只使用xhdpi图像!
如果你把所有的图像放在xhdpi文件夹中,应用程序不会因为其他密度的图像丢失而崩溃。图像将被调整为所有其他密度的较小尺寸,因此它不会失去它的特征。
谷歌的建议是有用的,当你创建不同的图像为每一个分辨率,而不仅仅是调整大小。ldpi图标(36 x36)=只有一个简单的棒球/ xhdpi图标(96 x96)=球棒击打棒球
还有一个细节,如果你把一个图像放在默认文件夹(mdpi),它会把它放大2倍,对于xhdpi设备,你可能会有OOM问题。如果你把图像放在xhdpi文件夹,它会把它缩小一半。
在实践中,这是不需要的,但如果您希望(非常?)小的性能改进,并且您不介意更大的APK,您可以添加它们。

zc0qhyus

zc0qhyus2#

当Eclipse创建启动器图标时,它只为mdpi、hdpi、xhdpi和xxhdpi创建图标,基于此,我假设不需要创建ldpi图标,mdpi会自动缩小

63lcw9qa

63lcw9qa3#

在ldpi设备中,如果应用在drawable-ldpi文件夹中找不到合适的可绘制对象,则它将从可绘制对象文件夹中检索可绘制对象,但如果可绘制对象太大,则可能会导致OutOfMemoryError。这就是为什么您应将drawable-ldpi文件夹与正确调整大小的可绘制对象一起使用的原因。

mbyulnm0

mbyulnm04#

让我来解释一下文件夹的层次结构是如何工作的,以及为什么在适当的文件夹中设置适当的图像是重要的。
android选择文件的方式是基于运行应用的设备的像素密度,它将从该密度开始(例如,hdpi),如果它没有找到资源,它将向下整个层次结构,直到"默认"可绘制,您可能会丢失不同密度文件夹中的资源,操作系统不会抱怨,但如果在默认文件夹中未找到资源,则操作系统会让您知道存在问题,与此问题相关的错误很难找到,让我举个例子,假设您只有drawable-hdpi文件夹中的资源,编译器不会抱怨,因为有一个资源具有您指定的ID,如果您在hdpi设备上运行应用程序,您不会有任何问题,但是如果应用程序在ldpi设备上运行,应用程序将崩溃,因为操作系统将尝试在ldpi文件夹中查找它,然后在默认情况下,它们都不会包含导致崩溃的资源,这就是为什么大多数人只是跳过这一部分,并设置一切在"可绘制"(默认文件夹),因为操作系统总是会在那里找到它,无论您使用的是什么密度,但这里需要考虑的一个要点是,当您没有适当的资源来获得适当的像素密度时,操作系统本身将尝试做一个"调整"的唯一资源发现占用大量的内存只是因为计算,在我工作的一个项目没有适当的资源为适当的像素密度是造成outofmemoryerror,因为操作系统是调整所有的资产,让很少的空间为其他行动...
问候!

ctrmrzij

ctrmrzij5#

不管怎样,如果你看一下KitKat的AOSP源代码,一些内置的应用程序不再有LDPI资源了,所以我想说,不,它们不再需要了。

xcitsw88

xcitsw886#

不需要ldpi密度文件夹,因为它不再使用。请参见lint说明
“低密度实际上已不再经常使用,因此此检查忽略“+“ldpi密度。若要强制lint包含它,请设置环境“+“变量ANDROID_LINT_INCLUDE_LDPI=true。有关“+“当前密度使用情况的详细信息,请参阅“+“https://developer.android.com/about/dashboards“,
另外,如果你查看android官方的distribution dashboard,你会发现ldpi的使用率是0%

相关问题