引用另一个layout.xml文件而不重复它

时间:2011-09-14 21:51:19

标签: android layout reusability

我需要为几个不同限定符的Activity提供相同的layout.xml文件。我知道有一种方法可以引用一个现有的layout.xml,而不是真正复制它并重复它。

但是怎么样?目前无法在Android文档中找到它...: - /

有人比我快吗?

编辑:虽然我找到了这个“解决方案”,但我仍然不在那里。

<?xml version="1.0" encoding="utf-8"?>
<merge>
    <include layout="@layout/main_ltr"/>
</merge>

我需要指向不同的限定符的布局文件,而不是指向同一限定符中的另一个布局文件。 背后的原因:我通过证明屏幕宽度限定符来指定新的Android 3.2限定符。但是在Android 3.0 / 3.1上这不起作用,我需要xlarge,但我希望它完全是SAME文件,而不是副本!

3 个答案:

答案 0 :(得分:7)

如果我理解正确,提问者有一个用于xlarge和sw-600dp的布局文件,另一个用于所有其他布局文件。无论如何,当我偶然发现这个问题时,这是我的情况。

可以通过创建文件夹layout-xlarge和layout-s600dp来解决这个问题,并在每个文件夹中放置一个布局文件但内容相同。但是出于显而易见的原因,人们不希望在两个文件夹中有两个完全相同的文件。

这是我解决问题的方法。根本不要制作layout-xlarge和layout-sw600dp文件。假设您正在使用布局文件/res/layout/cool_activity.xml创建一个很酷的活动。在同一文件夹中创建平板电脑布局文件,但名称不同,即/res/layout/cool_activity_for_tablet.xml,然后创建文件夹values-xlarge和values-sw600dp,其中包含layout.xml文件,内容如下

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="cool_activity" type="layout">@layout/cool_activity_for_tablet</item>
</resources>

是的,你仍然会有2个具有相同内容的内容,但这是愚蠢的内容,而不是布局本身,可能是数百行的xml。

答案 1 :(得分:4)

<include>请参阅Layout tricks #2

<merge>请参阅Layout tricks #3

答案 2 :(得分:0)

为小型和xlarge设备创建包装器布局my_activity.xml和布局。

<merge>
    <include layout="@layout/my_activity_small.xml"/>
</merge>

您的资源应如下所示:

layout
  -> my_activity.xml
  -> my_activity_small.xml
  -> my_activity_xlarge.xml

现在覆盖my_activity.xmllayout-xlarge中的layout-sw600dp

<merge>
    <include layout="@layout/my_activity_xlarge.xml"/>
</merge>

您的资源应如下所示:

layout
  -> my_activity.xml           <-- includes my_activity_small.xml
  -> my_activity_small.xml
  -> my_activity_xlarge.xml
layout-xlarge
  -> my_activity.xml           <-- includes my_activity_xlarge.xml
layout-sw600dp
  -> my_activity.xml           <-- includes my_activity_xlarge.xml

在代码中使用my_activity.xml来加载布局。

P.S。:您不能指向另一个限定符目录中的布局,正如您在其中一条评论中提到的那样。