我正在Android“多屏尺寸”域中完成一项非常琐碎的任务。
我正在努力实现的目标
与屏幕宽度匹配的布局,具有九个补丁的背景,该背景会调整大小(仅水平放置,因为始终有足够的垂直空间)。这是虚拟图像:
我的目标是根据屏幕分辨率,通过使用一组不同的尺寸,以尽可能高的分辨率显示图像。320x45、480x67、600x87、720x101,没有任何缩小比例。我希望有一个非编程的解决方案。
具有上述图像尺寸的示例为:
问题
整个Android资源分配都围绕dp
s(与密度无关的像素)展开,而实际上我想根据实际可用像素显示图像。
如果我将480x67图像分配给res / drawable-mdpi,将600x87分配给res / drawable-hdpi,则图像将正确显示在480x800的5.4英寸显示器上,即mdpi显示器。但是,4英寸480x800显示器则可以显示为hdpi和系统将指定600x87的图像,该图像不适合屏幕。
我尝试了在线指南中所述的smallestWidth
参数,但是会产生奇怪的结果。例如,尽管我也有一个drawable-sw480dp资源,但是3.7“ 480 x 800显示器(hdpi)使用了我的drawable-sw320dp图像。
提前致谢!
我相信通过结合使用密度和屏幕尺寸资源限定符,您可以实现接近最佳的性能。
让我们假设这种资源文件夹结构:
drawable-normal-hdpi
-normal
尺寸规定最小宽度为320dp。hdpi
规定1.5X dp到像素乘法器。因此,normal hdpi
存储分区的最小px宽度为480px。我们在此处放置了一个480px宽的图像。drawable-normal-xhdpi
-尺寸再次决定了320dp,但这一次是2倍乘数。因此,我们使用640像素宽的图片。drawable-xlarge-mdpi
-尺寸至少为720dp。mdpi
乘数是1倍,因此我们使用720像素宽的图片。现在,让我们看一下一些设备,看看它们如何落入这些存储桶中:
normal hdpi
。实际px宽度:480px。图像非常合适。normal xhdpi
。我们可以容纳720像素的图像,因此我们使用的640像素图像不是最佳的-但距离非常近。xlarge mdpi
。我们可以容纳800像素,我们的图像是720像素。再次不理想,但足够接近。最坏的情况:使用的图像质量可能提高5-10%。最佳案例:完美契合。
此方法的主要缺点是,您需要提供大量资源和文件夹来说明大小和密度的所有排列(如果需要将其与更多的区域设置,方向等限定符结合使用,则更糟)。但是,就我对Android的理解而言,如果不编写代码,您认为没有比这更好的东西了。
关于smallestWidth
以下内容的评论:您的怪异行为示例实际上是预期行为。hdpi乘数为1.5-480像素宽的hdpi显示屏正好是320dp宽。如所记录的,这使drawable-sw320dp成为正确的选择。我不确定是否可以将smallestWidth
限定符与dpi限定符结合使用。如果可能,您可能会得到比大小修改器更准确的结果。但这意味着图像质量提高5%会产生更多的排列。可能不值得。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句