只有在Android应用程序中使用XHDPI drawables?

如果您计划在不久的将来支持LDPI,MDPI,HPDI和XHDPI,可以在项目中只包含XHDPI drawable,并让这些设备按照他们想要的分辨率进行缩放?

我已经testing过在Photoshop中将drawables调整为MDPI和HDPI,然后将结果与XHDPI drawables进行比较,只调整Android的大小,我看不出任何区别。 采取这种捷径是不好的devise? 不必将每个drawable调整为3种不同的分辨率就好了。

规划使用目标SDK是2.1或2.2。

BR Emil

我想这是一个好方法。 我能想到的唯一不足就是小规模设备上的资源开销以及由于缩小而造成的可能的人为因素。 实际上,在今年的Google IO上,Chris Pruettbuild议仅embedded高分辨率资产,并让opengl处理缩放。

从Android 1.6开始,处理不同的密度,包括XHDPI(直到2.2才正式添加)。 您的应用程序将首先查找与其密度相匹配的图像,但可以查看较大的“存储桶”(如XHDPI),然后执行缩放。

最好包含您想要支持的密度的特定资产。 100×100的图像需要40kb; 而200×200的图像需要160k(未压缩)。 因此,在MDPI设备上使用的任何XHDPI资产都是您需要的数据量的四倍,这些数据必须在应用程序启动并准备好资源时处理。 更低的内存使用意味着更高的效率,更less出现OutOfMemoryException的机会。

此外,自动缩放时,特定types的图像看起来很糟糕。 特别是细线或精细图案的图案会让他们的细节变得模糊。 当您手动缩小图像时,您可以select最适合您需要的algorithm(线性,双三次,lanczos等)。

如果您担心自己resize所需的时间,则可以合并批处理或使用诸如“Nine Patch Resizer”之类的工具: http : //code.google.com/p/9patch-resizer/

我testing了一个简单的应用程序(为Android 2.1开发)只使用xhdpi图像,它在小,中,高分辨率工作正常…即使我testing了Android 2.1(小分辨率),它打开imagen没有问题。

也许与记忆的东西是真的,所以它有必要的人testing这个。

我个人发现,只使用xhdpi文件夹在许多应用程序中工作得很好,并且是这种方法的大力支持者。 在内存开销是真实的,但与今天的设备,我会认为它可以忽略不计。 另外,我认为在缩小后还有一些caching,因为我从来没有注意到任何caching。 只包括一个文件夹可以大大减less你的APK大小,最终用户将非常欣赏。 你应该记住,一些图像会得到缩放工件(精细的图案和东西),但我个人从来没有遇到任何关键在我的应用程序。 另外对于button和东西,一定要使用9个补丁,以减less圆angular的文物,你甚至可以使用这种方法稍微减less图像的大小。 旧版本的API级别不会成为问题,因为我认为drawable-xhdpi被认为只能在不支持它的版本上绘制。 不要忽略在xml中定义一些简单的drawable的机会,例如,只需使用形状创build渐变背景非常简单,这样可以节省空间,而且不会冒缩放工件的风险。

XHDPI仅在Android SDK API级别9(姜饼)中引入(请参阅http://developer.android.com/reference/android/util/DisplayMetrics.html#DENSITY_XHIGH ),所以如果您打算使SDK级别低于9还需要至less提供HDPI drawable,否则Froyo或更低版本的设备将不显示任何内容。

更新:它实际上好像姜饼之前的版本将显示xhdpi图像: https ://groups.google.com/d/msg/android-developers/yjYO91OmoJ4/v3he0ZbKo-UJ

只有xhdpi资源是可以的。 但请注意,xhdpi是与api级别9(姜饼)一起推出的。 也就是说,如果您的目标API级别<= 8,您至less还需要hdpi资源。

这个额外的内存使用情况是错误的。

如果您将MDPI文件夹内的XHDPI大小绘图,您将有内存问题。

但是,如果您在XHDPI文件夹中提供了XHDPI drawable,则不会使用额外的内存,因为android会通过跳过部分内容来对图像进行下采样。

这种skipping的原因是你需要提供你计划支持的每个密度的drawable,以使它们看起来不错。

另一方面,只有特定的图像在下采样时(大部分是小图标)看起来很糟糕,只要图像有足够的数据可以扔掉,就会看起来不错。 或者想象一下,如果你有一个网格作为可绘制的,所以潜在的一些网格线可以扔掉,图像看起来很糟糕。

最后,对不同的设备进行实验比较好,那么你就可以知道哪些设备的密度需要替代资源。