2012-06-26 141 views
0

我是新來的android開發,我將開發一個android應用程序。在這個應用程序中,我想動態生成xml佈局。登錄到應用程序後,服務器將發送xml模板,其中包含不同屬性描述(每個控件的驗證,最大長度,控件大小等)的控件描述,這意味着不會有預定義的xml佈局。如何動態修改Android佈局XML

我的計劃是,從下載的xml模板中,我將創建一個xml佈局,並將該xml存儲在sqlite數據庫中。當用戶點擊一條記錄時,我想將這個動態創建的表單顯示給用戶。

是否可以修改xml佈局(如設置innerxml)?

+1

這真的是個好主意嗎? –

+0

我的疑問是,是否有可能? – user922834

+0

使用html頁面從服務器加載您的動態視圖。 –

回答

1

你可以嘗試這樣的事情:

LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View myView = inflater.inflate(myXmlPullParser, null); 

setContentView(myView); 
0

它僅與線性佈局,並在OnCreate訪問ID爲佈局possible.take一個XML佈局和編程創建所有的意見,並添加到線性佈局作爲子視圖,然後將該xml佈局設置爲setContentView。 之後,您希望在View Created之後添加更多視圖,您可以運行UI線程並添加視圖。

1

基於View documentation

重要由於性能原因,查看通貨膨脹在很大程度上依賴於被在編譯的時候做的XML文件的預處理。因此,在運行時,通過普通的XML文件使用LayoutInflater和XmlPullParser是不可能的。

你不能充氣佈局,如果它不是在佈局res目錄裏面。

+0

res dirctory中會有一個佈局文件。是否可以動態更改innerxml(用新創建的佈局替換)該佈局文件? – user922834

+0

您需要首先膨脹_innerxml_。要做到這一點,你需要'LayoutInflater.inflate()'。但是,這種方法不接受動態加載。它必須來自'res'文件夾。我的結論是:你仍然不能那樣做。 – ariefbayu

+0

@ user922834「是否可以動態更改該佈局文件的innerxml(替換爲新創建的佈局)?」 - 不!因爲它被編譯。 – ejohansson

0

我認爲,而不是動態地創建xml,你應該看看你想要編程的創建視圖, 如果你應該按照建議的TheWAlkingCube做它的高級視圖,動態地膨脹一個xml視圖。

0

Android不支持完全工作的方式,但可以動態構建自己的佈局。

創建您自己的TemplateBuilder -class。該類將從您的服務器檢索佈局文件(並可能將其保存在您的數據庫中)。可以讀出XML文件,並且可以在運行時添加每個定義的項目。如前所述,這不是您應該在Android中工作的常規方式,但它將是您的最佳選擇。

如果您有更多的時間在佈局中使用某些ViewGroups或佈局,您可以將它們定義爲XML文件,並在需要時爲它們充氣。創建預定義的佈局塊您可以隨時膨脹並逐字地構建自定義佈局。

對於在運行時添加視圖,您可以訪問以下鏈接的例子: http://www.dreamincode.net/forums/topic/130521-android-part-iii-dynamic-layouts/

0

如果你堅持做這種方式,你必須解析XML文件接收,在你的程序,並添加每個視圖xml佈局的編程方式基於如何在接收的文件中請求