如果你计划在不久的将来支持LDPI,MDPI,HPDI和XHDPI,那么只在项目中包含XHDPI drawable并让设备将它们扩展到所需的分辨率是否可以?
我已经测试过在Photoshop中将drawables调整为MDPI和HDPI,然后将结果与仅通过Android调整大小的XHDPI drawable进行比较,我看不出任何差别。采取这种捷径是不好的设计?如果不必将每个可绘制的大小调整为3种不同的分辨率,那将是很好的。
计划使用目标SDK是2.1或2.2。
BR 埃米尔
答案 0 :(得分:25)
我想这是一个很好的方法。我能想到的唯一缺点是小规模设备上的资源开销和可能的工件,因为缩减。实际上今年的Google IO Chris Pruett建议只嵌入高分辨率资产,让opengl处理缩放。
答案 1 :(得分:15)
从Android 1.6开始,处理不同的密度,包括XHDPI(直到2.2才正式添加)。您的应用程序将首先查找与其密度匹配的图像,但它可以查看更大的“桶”,如XHDPI,然后为您执行缩放。
最好为要支持的密度包含特定资产。 100x100的图像需要40kb;和图像200x200需要160k(未压缩)。因此,MDPI设备上使用的任何XHDPI资产都是您需要的数据量的四倍,必须在应用程序启动并准备好资源时处理这些数据。较低的内存使用意味着更高的效率,更少的OutOfMemoryException机会。
此外,特定类型的图像在自动缩放时看起来会很糟糕。特别是,具有细纹或精细图案的图像将使其细节变得混乱。当您手动缩小图像时,您可以选择最符合您需求的算法(线性,双三次,Lanczos等)。
如果您担心自己调整大小所需的时间,可以使用批处理或使用Nine Patch Resizer等工具:http://code.google.com/p/9patch-resizer/
答案 2 :(得分:4)
我在一个简单的应用程序(针对Android 2.1开发)中进行了测试,仅使用xhdpi图像,它在小,中,高分辨率下工作正常......即使我在Android 2.1(小分辨率)中测试过它也打开了图像问题
也许内存中的东西是真的,所以有必要对此进行测试。
答案 3 :(得分:3)
我个人发现只使用xhdpi文件夹在很多应用程序中运行良好,并且是这种方法的大力支持者。在内存开销是真的,但对于今天的设备,我认为它可以忽略不计。另外我认为在降尺度之后会有一些缓存,因为我从未注意到因此而减速。只包含一个文件夹可以大大减少您的APK大小,最终用户会非常欣赏。你应该记住,一些图像将获得缩放工件(精细模式和东西),但我个人从未在我的应用程序中遇到任何关键。另外对于按钮和东西,一定要使用9个补丁以减少圆角上的伪影,你甚至可以通过使用这种方法稍微减小图像尺寸。 API级别在旧版本上不会出现问题,因为我认为drawable-xhdpi在不支持它的版本上被认为是可绘制的。 不要忽视在xml中定义一些简单drawable的机会,例如,只使用形状创建渐变背景非常容易,这样可以节省空间并且不会有缩放工件的风险。
答案 4 :(得分:2)
XHDPI仅在Android SDK API Level 9(Gingerbread)中引入(请参阅http://developer.android.com/reference/android/util/DisplayMetrics.html#DENSITY_XHIGH),因此如果您计划的最低SDK级别低于9,您还需要提供至少HDPI drawables此外,使用Froyo或以下设备的设备也不会显示任何内容。
更新:实际上,Gingerbread之前的版本似乎会显示xhdpi图片:https://groups.google.com/d/msg/android-developers/yjYO91OmoJ4/v3he0ZbKo-UJ
答案 5 :(得分:2)
只有xhdpi资源是可以的。但请注意,xhdpi是用api level 9(姜饼)引入的。也就是说,如果您将api级别< = 8定位,则至少还需要hdpi资源。
答案 6 :(得分:0)
关于额外内存使用情况的声明是错误的。
如果您将XHDPI
大小的drawable放在MDPI
文件夹中,那么您将遇到内存问题。
但是如果你在XHDPI
文件夹中提供XHDPI
drawables,那么将不会使用额外的内存,因为android通过跳过部分图片来对图像进行下采样。
此skipping
是您需要为计划支持的每个密度提供drawable的原因,以使它们看起来很好。
另一方面,只有某些图像在下采样时会显得很糟糕(大多数是小图标),所以只要图像有足够的数据被丢弃,它就会显得正常。或者想象一下,如果你有一个可绘制的网格,那么潜在的一些网格线可能会被扔掉而且图像看起来很糟糕。
最后,您最好尝试使用不同的设备,然后您可以确定哪些绘图需要替代资源的密度。