我需要为几个不同限定符的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文件,而不是副本!
答案 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.xml
和layout-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。:您不能指向另一个限定符目录中的布局,正如您在其中一条评论中提到的那样。