特定于密度的布局与Android中特定于大小的布局

时间:2013-01-21 22:35:24

标签: android android-resources

很长一段时间以来,我一直在为4种不同的密度声明资源文件夹:

  • 抽拉-LDPI
  • 抽拉-MDPI
  • 抽拉-HDPI
  • 抽拉-xhdpi

在布局的XML中,我一直在使用固定宽度(虽然仍然是密度无关的),例如128dp用于那些图形。

然而,当越来越多的大屏幕手机,特别是平板电脑被引入时,这种方法不再适用。虽然您以这种方式提供与密度无关的资源,但在大屏幕上布局效果不佳。

这就是为什么我认为我需要添加依赖于屏幕大小的Dimension资源,以便在XML布局中使用,例如:

  • 值-w600dp
  • 值-w720dp
  • 值-w1024dp

但这是否意味着我应该放弃支持这4个密度容器?或者我需要提供16个资源文件夹,即每个密度和大小的组合一个?

我无法在Android documentation中找到关于此主题的任何好帮助。

2 个答案:

答案 0 :(得分:4)

drawables和layouts是不同的。要回答你的问题,你应该停止支持那些密度。是的,但你仍然应该支持xdpi和hdpi。 Romain Guy最近表示像Nexus 7这样的现代设备(在tvpi上)可以适当地扩展资产,以至于不需要mdpi。没有人再使用ldpi了。最后我看起来不到市场的2%。

关于布局。 Nexus 7(1280x800 tvdpi)将使用值-w1024dp中的某些内容,但仍然可以从drawable-hdpi文件夹中获取资源。这两者并不相互排斥。像S3这样的东西也会从值-w1024dp中拉出来,但是使用drawable-xdpi。如果您的用例需要它,您只需要提供一个替代布局。

那么你需要16种不同的东西吗?不,你需要xdpi& hdpi(如果不是mdpi)。您可能想要包含不同尺寸的替代布局。您可以根据需要或通用。除非你正在为手机和手机做混合应用程序平板电脑(7& 10 in)你可能不需要很多xxxx-sizexxx文件夹。

  

在布局的XML中,我一直在使用固定宽度(虽然仍然是密度无关的),例如128dp用于那些图形。

这可能是您的问题的根源。使用wrap_content和match_parent,您的布局应尽可能流畅。固定尺寸应保留用于两侧的填充和图像,您提前知道尺寸。如果你这样做,你的布局应该看起来不错,从320 x 200到GTV的小尺寸。

答案 1 :(得分:0)

1)关于布局中的尺寸(values / dimens.xml):

  

值value-w600dp values-w720dp values-w1024dp

     

但这是否意味着我应该放弃支持那4个密度   容器?或者我需要提供16个资源文件夹,即一个   密度和尺寸的每种组合?

不,您不需要为每个dpi存储桶提供不同的尺寸(hdpi / xhdpi),因为尺寸已经根据设备放大或缩小(如果您使用的是dp而不是px)。因此,对于尺寸,您只需要为具有不同尺寸的设备提供值(因此名称,值 - 最小可能宽度 -600-dp)。因为你不想在手机上使用16dp填充而在10英寸平板电脑上也需要16dp。你需要64dp而不是。不,它与设备的密度无关。它仍然需要具有相同的填充因此,对于尺寸,您只需要考虑设备的实际物理尺寸。

2)关于不同分辨率的drawables缩放(drawables / xdpi): 系统会根据设备适当缩放它们。你不必担心这个。此外,您无需在此处添加任何其他存储桶。只需使用mdpi / hdpi / xhdpi和xxhdpi,因为许多新设备将来会使用新的密度。

结论:有两种不同的UI构建组件根据两种不同的规则而变化:基于屏幕密度的可绘制和基于屏幕大小的尺寸。不要把一个误认为另一个,并认为你在values文件夹中需要数十个桶,因为这不仅是错误的,它只是令人难以置信。