2010-12-01 100 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()上,或從未使其可見它不會被添加到佈局層次。