`wrap_content`的工作方式与Density Pixels相同吗?

时间:2016-05-10 20:17:30

标签: android android-layout android-linearlayout pixel-density

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

客户已向我提供了PSD文件中的图片,该图片具有适合的特定分辨率 1080 X 1920。我只使用wrap_content,它非常适合这部分 屏幕。

我没有使用DP来定义width-height,如果我使用DP则会 根据{{​​1}}调整图像。

我的问题是,

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

1 个答案:

答案 0 :(得分:1)

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

但是如果设备屏幕不是1080x1920呢?在这种情况下,Android将只使用尽可能多的空间,但仍尝试将图像放入可用屏幕空间的边界内。换句话说,系统将适当地缩小图像以将其放入您为其提供的容器中。但如果纵横比与图像不同,这可能会导致尴尬。例如,请参见下面的屏幕截图:

enter image description here

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

因此,为了更直接地解决您的问题,是wrap_content是相对大小设置,可以更轻松地在多种屏幕尺寸上获得一致的外观,类似于使用dp。但要意识到市场上有数百种(如果不是数千种)可用的Android设备,它们都有不同的屏幕尺寸和密度。因此,您的drawable可能并不总是按照您希望的方式出现在每台设备上。

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

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

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