2009-12-21 84 views
11

我目前正在研究一個需要我使用XML文檔在Android設備上呈現表單的項目。表單必須在運行時獲取並顯示。我想知道是否有一種方法來標記表單XML,使用XSLT將其轉換爲Android佈局XML,然後讓設備呈現它。在Android中構建/使用運行時生成的佈局XML

+1

只是受到警告。 Android在運行時會做很多工作來優化對這些文件的讀取和解析。所以,如果你推出自己的產品,請準備好讓它慢一點。 – haseman 2009-12-21 20:30:53

回答

6

Android僅包含一種內置方式,用於「膨脹」作爲佈局資源存儲在APK文件中的佈局XML。如果您想從其他來源「膨脹」相似(或不同)的XML,則必須自己實施,或許可以通過克隆LayoutInflater類中的某些邏輯來實現。

0

LayoutInflater.inflate方法會將XmlPullParser作爲參數,因此您只需將您的動態創建的XML加載到PullParser中並將其傳遞給inflater即可。

+6

但是,如果您實際上閱讀了該方法的文檔,它說「目前在運行時通過普通XML文件使用LayoutInflater和XmlPullParser」。 – 2009-12-21 20:23:48

+0

好吧,我可以看到這是一個非常整潔的功能。 – CaseyB 2009-12-21 20:36:42

12

不幸的是,你不能僅僅克隆LayoutInflater或者使用其他這樣的技巧來做到這一點 - 佈局通脹完全依賴於採用AttributeSet參數的視圖構造函數,它完全依賴於Context.obtainStyledAttributes方法本身完全依賴於預處理的二進制XML文件能夠執行合理有效的屬性解析。

您可以探索的另一種方法是在您的服務器上使用aapt工具(或更可能是其被黑客入侵的版本),將您生成的佈局編譯爲適當的數據。不幸的是,我們目前沒有辦法從原始二進制blob構建XmlPullParser(它必須從AssetManager中獲得此blob),因此使用此方法在客戶端和服務器上都要做相當多的工作。我懷疑可以拿出一些非常整齊的東西,但這將會有很多工作。

+0

考慮到這是需要在接下來的一週半原型的東西,我認爲這不是我應該調查,直到以後的日子。你會同意嗎? 我已經完成了從桌面和web平臺上運行之前的XML的UI構建。對於Windows Mobile應用程序,我們也有一個實現。當我有更多的時間或者出現性能問題時,我可能只需模擬這些方法並在稍後調查aapt。 – illvm 2009-12-21 22:18:55

+0

是的,這不是一個一週的項目。 :) 最簡單的方法是製作一個簡單的XML結構,該結構可以定義您的佈局所需的內容,而不會嘗試允許Android佈局可以執行的任何可能的事情。解析並將其轉換爲視圖佈局的構建應該相當簡單;您可以根據需要將新設施添加到XML格式。 – hackbod 2009-12-21 22:25:32