我想加載用戶創建的XML文件,以在我的應用中使用它。我知道無法將XML文件用作資源,因爲佈局文件是在構建APK進程中編譯的。無論如何要在佈局文件夾外部使用/創建/加載佈局?用戶創建的加載佈局
回答
您不能膨脹任意XML,因爲Android項目中的XML文件在構建時得到處理並轉換爲二進制格式。換句話說,您只能通過Java API以編程方式構建佈局。
你可以做的是分析用戶的文件與標準的XML解析器(如XmlPullParser
和建立你自己。基本上你會被重新實現LayoutInflater
,你可以找到網上的源代碼的意見。
需要注意的一點是,用戶的XML根本無法引用資源,例如他們無法完成像android:textColor="@color/some_color"
這樣的操作。構建過程會將這些引用轉換爲資源值的指針,而如果您只是簡單地用普通的XML讀取它,它只是文本"@color/some_color"
。
也許不是允許用戶可以創建完整的Android佈局XML,您應該選擇一些您將支持的有限的子集,並定義一種更簡單的方式來描述這些自定義佈局。那麼你不必使用XML,你可以用你想要的東西來定義一個自定義的「語言」。這樣您可以將用戶限制在相對簡單的API中,如文本顏色;您只需將您自定義語言中定義的某個字段映射到textView.setTextColor()
即可。
您可以從您的文件創建一個XmlPullParser並將其傳遞給佈局壓縮程序。
若要從您的文件中XMLPullParser你可以按照這個例子:https://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
而且具有XMLPullParser對象之後,就可以調用這個方法:https://developer.android.com/reference/android/view/LayoutInflater.html#inflate(org.xmlpull.v1.XmlPullParser,android.view.ViewGroup)
你需要一個ViewGroup將成爲視圖的父級。如果您需要該視圖爲活動,我建議您使用佈局創建一個空的活動,並將分析的佈局添加到空白布局。不要試圖在沒有父母的情況下膨脹佈局,你可以在不同的設備中獲得不同的結果。
這是一個通知佈局實際上,所以沒有父母:/ – greywolf82
@ greywolf82我看到,現在NotificationBuilder期待RemoteViews。我認爲你可以從一個空白的佈局文件(只使用視圖組)創建一個RemoteViews,並且在使用addView(View)方法從LayoutInflater中添加充氣視圖之後。您可以使用RemoteView作爲父項。 – jonathanrz
在文檔中有:重要由於性能原因,查看通貨膨脹嚴重依賴於在構建時完成的XML文件的預處理。因此,在運行時,通過普通的XML文件使用LayoutInflater和XmlPullParser是不可能的。 – greywolf82
- 1. 在JS或AJAX中創建新的HTML加載HTML佈局?
- 2. SWT佈局創建
- 3. 創建樹佈局
- 4. 在相對佈局中創建佈局
- 5. android-在加載主佈局之前加載進度條佈局
- 6. 創建XML的Android佈局
- 7. 創建div的佈局
- 8. 爲AJAX加載創建全局變量
- 9. 如何創建佈局使用的UITableViewController
- 10. 如何在Android中保存(用戶創建的)動態佈局?
- 11. CakePHP iPad佈局未加載
- 12. Android:緩慢佈局加載
- 13. jQuery遞歸加載佈局
- 14. 加載佈局xml失敗
- 15. 網站不加載佈局
- 16. 創建圖像佈局
- 17. 創建響應式佈局
- 18. Android:創建動態佈局
- 19. 從ArrayList創建ListView佈局
- 20. 想要創建佈局
- 21. 創建佈局圖像
- 22. 創建三行佈局
- 23. 動態創建佈局
- 24. 基於用戶交互動態加載XAML佈局
- 25. WPF用戶控件創建多個佈局選擇
- 26. 使用Ruby on Rails預加載佈局
- 27. CSS使用div創建列布局
- 28. 如何用RecyclerView創建此佈局?
- 29. 如何使用PreferenceCategory佈局創建TextView?
- 30. 用css創建網格佈局
據我所知,沒有辦法做到這一點在一般情況下 – Vyacheslav