6

我的应用程序根据屏幕配置显示单窗格 UI 或两窗格 UI。在较小的屏幕上,纵向和横向都应该是一个窗格。在中型屏幕(“最小宽度”为 600dp 及以上的任何屏幕)上,横向可以很好地适应两窗格布局,但在纵向屏幕上,它应该使用单窗格布局。在较大的屏幕上,它应该在两个方向上使用双窗格布局。我还想支持 3.2+ 风格的限定符(如 sw600dp 和 sw720dp)以及旧的“大小桶”限定符(“xlarge”)。

最直接的方法是创建几个不同的 XML 布局文件,每个配置一个:

  • res/layout-sw600dp-land/main.xml
  • res/layout-sw600dp-port/main.xml
  • res/layout-sw720dp-land/main.xml
  • res/layout-sw720dp-port/main.xml
  • res/layout-xlarge-port/main.xml
  • res/layout-xlarge-land/main.xml
  • 资源/布局端口/main.xml
  • 资源/布局/main.xml

因此,这 8 个 XML 文件中有很多代码重复,它们基本上只描述了两种不同的布局。

我怎样才能做到这一点,而不必维护所有这些令人头疼的重复 XML 文件?

4

1 回答 1

11

您可以使用布局别名。与其在每个屏幕配置的 XML 文件中直接描述您的布局,不如在名为“onepane.xml”和“twopanes.xml”的两个 XML 文件中定义您的两个布局。这些文件放在 res/layout 中。

现在,您必须将这些布局映射到不同的屏幕配置,这就是“布局别名”技术派上用场的地方。对于每个屏幕限定符组合,在 res/values-X/layout.xml 中创建一个 XML 文件,其中 X 是限定符组合。在该文件中,根据需要声明一个指向 @layout/onepane 或 @layout/twopanes 的布局资源:

res/values-sw600dp-land/layout.xml:

<resources>
  <item name="main" type="layout">@layout/twopanes</item>
</resources>

res/values-sw600dp-port/layout.xml:

<resources>
  <item name="main" type="layout">@layout/onepane</item>
</resources>

对您的其他配置组合执行相同的操作,这样您就可以完成您正在寻找的内容:您可以将您的两个布局(一个窗格和两个窗格)映射到几个不同的屏幕配置,而无需复制您的布局。

有关这方面的更多信息,请查看 Android 培训中的“支持多个屏幕”课程:http: //developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters

于 2012-04-04T21:18:39.350 回答