`wrap_content` 的工作方式与密度像素相同吗?

Does `wrap_content` works the same way as Density Pixels?

我已阅读 Android 有关不同屏幕尺寸的指南,但我仍有一些注意事项。

客户给了我一张来自 PSD 文件的图像,该图像具有适合的特定分辨率 1080 X 1920。我就用了 wrap_content,它非常适合这个部分 屏幕。

我没有使用 DP 来定义它的 width-height,如果我使用 DP 它会 根据 screen sizes.

调整图像

我的问题是,

  1. wrap_content 与密度像素的工作方式相同吗?
  2. 是否也有响应,并根据width-height更改图像 到不同的屏幕?
  3. 如果没有,那么是否需要使用DP来支持不同的屏幕 尺码?

谢谢

设置 wrap_content 告诉您的视图根据其内容所需的尺寸调整自身大小。在您的测试中,您的图像是 1080x1920,您设备的屏幕分辨率也可能是 1080x1920,因此非常适合。由于您将宽度和高度设置为 wrap_content,Android 只是尝试使用尽可能多的屏幕 space,因为它需要正确显示所提供的内容量。在这种情况下,由于可用屏幕 space 与内容的大小相匹配,因此非常适合。

但是如果设备屏幕不是 1080x1920 怎么办?在这种情况下,Android 将只使用尽可能多的 space,但仍会尝试将图像调整到可用屏幕的范围内 space。换句话说,系统将适当地缩小图像以将其放入您为其提供的容器中。但如果长宽比与图像不同,这可能会导致不合适。例如,请参见下面的屏幕截图:

这张图片的尺寸为 1920x1080,但请注意它不太适合。那是因为这个 nexus 7 屏幕在横向观看时是 1824x1200。此外,屏幕顶部的工具栏正在占用可用屏幕space,使我的可视区域变得更小且形状更笨拙。因此,虽然系统希望此图像一直延伸到左右边界,但它不能,因为那样的话就意味着高度将大于可视区域 space。由于我使用 wrap_content 来显示此图像,系统使用了尽可能多的垂直 space,结果是图像不太适合水平 space。

因此,为了更直接地解决您的问题,是的,wrap_content 是一个相对大小设置,可以更轻松地在多个屏幕尺寸上获得一致的外观,类似于使用 dp。但请注意,市场上有成百上千种可用的 Android 设备,而且它们的屏幕尺寸和密度各不相同。因此,您的可绘制对象可能并不总是以您希望的方式出现在每台设备上。

克服这个问题的方法是提供资产的多个版本,并为不同的屏幕尺寸和密度提供备用布局文件。一旦你这样做了,你所能做的就是测试、测试、再测试一些。将模拟器用于奇怪的屏幕密度或您不拥有的设备,只是为了确保您获得想要的外观。对于 1920x1080 的图像,它在该设备上看起来很棒,但它如何适合尺寸小于图像分辨率的大型平板电脑或微型手机?这些是您必须在设计中考虑的情况。

我建议您阅读这些资源,因为它们对于学习如何处理因屏幕尺寸和密度不同而导致的问题非常有帮助:

http://developer.android.com/guide/practices/screens_support.html http://developer.android.com/training/multiscreen/screensizes.html