10

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

  • 可绘制的 ldpi
  • 可绘制的 mdpi
  • 可绘制的 hdpi
  • 可绘制的 xhdpi

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

然而,当越来越多的大屏手机,尤其是平板电脑被推出时,这种方法就不再适用了。尽管您以这种方式提供与密度无关的资源,但布局在大屏幕上看起来并不好。

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

  • 价值观
  • 价值观-w600dp
  • 价值观-w720dp
  • 价值观-w1024dp

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

我在Android 文档中找不到关于这个主题的任何好的帮助。

4

2 回答 2

4

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

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

那么你需要16种不同的东西吗?不,您确实需要 xdpi 和 hdpi(如果不是 mdpi)。您可能希望包含不同尺寸的替代布局。您可以随心所欲地具体化或通用化。除非您正在为手机和平板电脑(7 和 10 英寸)制作混合应用程序,否则您可能不需要很多 xxxx-sizexxx 文件夹。

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

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

于 2013-01-24T03:16:53.573 回答
0

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

值 值-w600dp 值-w720dp 值-w1024dp

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

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

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

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

于 2013-01-25T15:42:52.953 回答