2010-12-01 109 views
15

我可能会误解<include><merge>是如何工作的,但根据Simple example of <merge> and <include> usage in Android XML-layouts,<include>的意思是“取该文件并在其中粘贴其内容”。Android是否支持布局继承(类似于Django模板)?

比方说,你想有3个活动都有相同的标题,但有不同的内容。您仍然需要为每个活动准备3个XML布局文件。每个布局之间唯一的区别在于它们在<include>标签中定义了不同的布局。如果我想添加页脚,则必须更改每个布局。

我正在寻找一种方法来实现逆,所以孩子们的布局会覆盖父母的特定块(similar to Django templates)。这样,如果我想添加该页脚,则只需更改父页面,子页面将继续覆盖内容。

+3

好吧,你当然可以通过编程,使用布局inflater,一些模板和你自己的模板类。 – janoliver 2010-12-01 22:07:32

回答

11

比方说,你想有3个活动,都有相同的标题,但有不同的内容。您仍然需要为每个活动准备3个XML布局文件。每个布局之间唯一的区别在于它们在标签中定义了不同的布局。

如果您希望有三个活动都具有相同的标题,则每个活动都会有一个布局文件。该文件将具有该活动所特有的小部件,以及公用标头的<include>元素。

这样,如果我想添加该页脚,我只需更改父项,子项就可以继续覆盖内容。

目前Android不支持此功能。正如janoliver所指出的那样,您可以为此推出自己的解决方案。

2

我已经解决了这个问题,通过将ViewStub条目添加到父级的布局xml中,并且 - 根据子类的类型 - 给正确的存根充气。

http://developer.android.com/reference/android/view/ViewStub.html

ViewStub是有点懒加载一个视图,因此如果你从来没有调用inflate()上,或从未使其可见它不会被添加到布局层次。