2011-09-14 44 views
4

我需要爲幾個不同的限定符提供一個Activity的layout.xml文件。我知道有一種方法可以引用一個現有的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這不起作用,我需要在那裏,但我希望它是完全相同的文件,而不是副本!

+0

類似的問題:http://stackoverflow.com/q/6891339/253468 – TWiStErRob

回答

7

如果我理解正確提問者對XLARGE和SW-600dp的一個佈局文件,另一個用於所有的休息。無論如何,當我偶然發現這個問題時,就是這樣。

可以通過創建文件夾layout-xlarge和layout-s600dp來解決這個問題,並在每個文件夾中放置一個佈局文件,但內容相同。但是由於顯而易見的原因,人們不希望在兩個文件夾中有兩個完全相同的文件。

這是我對該問題的解決方案。根本不要製作layout-xlarge和layout-sw600dp文件。假設您正在使用佈局文件/res/layout/cool_activity.xml創建一個很酷的活動。在同一個文件夾中創建平板電腦佈局文件,但使用不同的名稱,即/res/layout/cool_activity_for_tablet.xml,然後使用以下內容在其中創建文件夾值爲xlarge和值爲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。

4

<include>看到Layout tricks #2

<merge>看到Layout tricks #3

+0

但是,我該如何指向不同限定符的目錄中的佈局,這是我的問題!所有這些包括和合並只有@layout,然後名稱,但不是目錄,又名限定符! – Zordid

+0

「限定詞」是什麼意思?你的意思是「hdpi」在'繪製,hdpi'? –

+0

是的,這是一個限定詞!背後的原因是:對於使用Android 3.0和3.1的平板電腦,我需要'layout-xlarge'中的佈局。但是在Android 3.2中,他們引入了新的限定符,而舊的則不鼓勵:'layout-sw600dp'例如意味着至少600像素寬度。否則7英寸平板電腦將無法獲得平板電腦佈局。現在,在我的情況下,layout.xmls需要相同!如何在sw600dp限定詞中引用xlarge中的那個?有時我真的認爲Android越來越奇怪了......: -/ – Zordid

0

創建一個包裝器佈局my_activity.xml和您的小和xlarge設備的佈局。

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

你的資源應該是這樣的:

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

layout-xlargelayout-sw600dp現在覆蓋my_activity.xml

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

你ressources應該是這樣的:

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 .:你不能指向另一個限定符目錄中的佈局,就像你在其中一個註釋中提到的那樣。

+0

您是否將我的問題閱讀到最後...? :-)我明確提到這是*不是*是正確的答案...對不起! – Zordid

+0

我一步一步解釋它。如果您正在尋找如何在不重複的情況下引用具有不同限定符的目錄中的佈局(就像您在問題中提到的那樣),以下是答案。 – artkoenig

相關問題