我目前正在研究一個需要我使用XML文檔在Android設備上呈現表單的項目。表單必須在運行時獲取並顯示。我想知道是否有一種方法來標記表單XML,使用XSLT將其轉換爲Android佈局XML,然後讓設備呈現它。在Android中構建/使用運行時生成的佈局XML
回答
Android僅包含一種內置方式,用於「膨脹」作爲佈局資源存儲在APK文件中的佈局XML。如果您想從其他來源「膨脹」相似(或不同)的XML,則必須自己實施,或許可以通過克隆LayoutInflater
類中的某些邏輯來實現。
LayoutInflater.inflate方法會將XmlPullParser作爲參數,因此您只需將您的動態創建的XML加載到PullParser中並將其傳遞給inflater即可。
但是,如果您實際上閱讀了該方法的文檔,它說「目前在運行時通過普通XML文件使用LayoutInflater和XmlPullParser」。 – 2009-12-21 20:23:48
好吧,我可以看到這是一個非常整潔的功能。 – CaseyB 2009-12-21 20:36:42
不幸的是,你不能僅僅克隆LayoutInflater或者使用其他這樣的技巧來做到這一點 - 佈局通脹完全依賴於採用AttributeSet參數的視圖構造函數,它完全依賴於Context.obtainStyledAttributes方法本身完全依賴於預處理的二進制XML文件能夠執行合理有效的屬性解析。
您可以探索的另一種方法是在您的服務器上使用aapt工具(或更可能是其被黑客入侵的版本),將您生成的佈局編譯爲適當的數據。不幸的是,我們目前沒有辦法從原始二進制blob構建XmlPullParser(它必須從AssetManager中獲得此blob),因此使用此方法在客戶端和服務器上都要做相當多的工作。我懷疑可以拿出一些非常整齊的東西,但這將會有很多工作。
考慮到這是需要在接下來的一週半原型的東西,我認爲這不是我應該調查,直到以後的日子。你會同意嗎? 我已經完成了從桌面和web平臺上運行之前的XML的UI構建。對於Windows Mobile應用程序,我們也有一個實現。當我有更多的時間或者出現性能問題時,我可能只需模擬這些方法並在稍後調查aapt。 – illvm 2009-12-21 22:18:55
是的,這不是一個一週的項目。 :) 最簡單的方法是製作一個簡單的XML結構,該結構可以定義您的佈局所需的內容,而不會嘗試允許Android佈局可以執行的任何可能的事情。解析並將其轉換爲視圖佈局的構建應該相當簡單;您可以根據需要將新設施添加到XML格式。 – hackbod 2009-12-21 22:25:32
- 1. 在運行時構建佈局android
- 2. 在XML中運行時動態構建表格佈局
- 3. 如何使用XML在android中生成佈局?
- 4. Android充氣佈局XML文件創建運行時
- 5. Android運行時佈局
- 6. 在xml中構建這個佈局?
- 7. 創建XML的Android佈局
- 8. 在android xml中使用佈局
- 9. 在xml佈局中使用android MediaController
- 10. Android的佈局構建
- 11. 運行時更改xml或佈局
- 12. 從Android中的XML生成的扭曲佈局
- 13. 在Android中使用LayoutInflater在另一個xml佈局中未顯示xml佈局
- 14. 如何在Android中構建此佈局?
- 15. Android動態生成佈局
- 16. 動態佈局生成Android
- 17. Visual Studio 2012開關佈局在構建和運行時
- 18. 知道運行時使用的佈局
- 19. Android - 在運行時向主佈局添加布局
- 20. 成功的Gradle項目構建在運行時產生NoClassDefFoundError
- 21. 構建反應原生運行Android的
- 22. Android的 - 在佈局XML
- 23. 的Android XML佈局
- 24. 管理佈局運行時android
- 25. Android。幫助運行時佈局設計。
- 26. 使用Gitlab生成Android構建CI
- 27. Android應用程序在運行時佈局中處理控件
- 28. Android APK在運行時不會生成
- 29. Android - 在其他xml佈局中添加一個xml佈局
- 30. 如何使用基於XML的GUI佈局生成python GUI?
只是受到警告。 Android在運行時會做很多工作來優化對這些文件的讀取和解析。所以,如果你推出自己的產品,請準備好讓它慢一點。 – haseman 2009-12-21 20:30:53