我需要從服務器動態加載xml佈局。 LayoutInflater擴充了使用XmlPullParser的方法。我試過了,但它不起作用。XmlResourceParser實現
展望Android源代碼,事實證明這些膨脹方法稱爲帶有XmlResourceParser。 Android使用的實現是XmlBlock.Parser,但這不是一個公共API。
是否有XmlResourceParser公開的實施可以使用嗎?
我需要從服務器動態加載xml佈局。 LayoutInflater擴充了使用XmlPullParser的方法。我試過了,但它不起作用。XmlResourceParser實現
展望Android源代碼,事實證明這些膨脹方法稱爲帶有XmlResourceParser。 Android使用的實現是XmlBlock.Parser,但這不是一個公共API。
是否有XmlResourceParser公開的實施可以使用嗎?
您可以使用傳統的XmlPullParser
像Android documentation描述:
InputStream yourRemoteLayout = ...;
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(yourRemoteLayout, "someEncoding");
AttributeSet attributes = Xml.asAttributeSet(parser);
請看看有什麼在XmlPullParser documentation解釋更多的細節。
編輯:從LayoutInflater#inflate()文檔:
Important For performance reasons, view inflation relies heavily on pre-processing of XML files that is done at build time. Therefore, it is not currently possible to use LayoutInflater with an XmlPullParser over a plain XML file at runtime.
我想什麼,是,也許你應該讓自己實現LayoutInflater.Factory2
如果Android的自己只能靠預處理資源。
在你給的例子中,myResource是一個int。我沒有那個int,因爲資源不是應用程序的一部分。 – Mugur
膨脹方法使用XmlResourceParser。唯一的實現是XmlBlock.Parser,它使用了一些本地代碼,而不是公共API的一部分。因此,我的問題。 – Mugur
對不起,我沒有仔細觀察整數。我會搜索一些解決方法。我查了一下你說的XmlResourceParser,但沒有找到它。該文檔講述了一個XmlPullParser,並且源代碼不會進行任何嘗試(我看起來4.0.3,但我可能錯過了某些東西)。你可以給一些更精確的參考XmlResourceParser? –
實際上,您不能動態加載xml佈局。 android系統不需要一個XmlResourceParser。當android ui系統膨脹資源時,它只是將解析器轉換爲它的私有實現,一個二進制xml源解析器(我忘記了類名)。
1年前,我想這一點,花了很多很多次。所以,不要再把我的時間浪費在我身上了。
如果您查看Android源代碼,您會注意到使用XmlResourceParser作爲參數調用了LayoutInflater.inflate方法。從理論上講,XmlResourceParser的實現將解決我的問題,但是我找不到任何地方的Android二進制XML格式規範。所以,我不同意你說不能做到這一點,在這個時候這很複雜,所以,我同意你的第二點,現在嘗試去做是浪費時間。 – Mugur
我知道,但它只是看着View的構造函數,它通過'Context.obtainStyledAttributes'處理'AttributeSet',然後處理'Resources.obtainStyledAttributes'。在這個方法中:'XmlBlock.Parser parser =(XmlBlock.Parser)set'。如果你實現了XmlPullParser,你如何提供這個對象來查看?或者你可以忽略AttributeSet並自己實現它們。但請注意,View的構造函數使用許多「@ hide」api而無法訪問。 – afpro
由於性能方面的原因,查看通貨膨脹嚴重依賴於在構建時完成的XML文件的預處理。因此,在運行時,通過普通的XML文件使用LayoutInflater和XmlPullParser是不可能的。
這並不是說不能做。但是,您需要在xml文件上運行構建工具以將其轉換爲正確的格式。然後你可以或許嘲笑一個「語境」和「資源」在使用時返回下載的數據的「LayoutInflator」
關於如何「嘲諷'背景'和'資源'」的任何想法? – Mugur
是,現在的問題是有可能的Droid的ItsNat。
看看這個總結:
https://groups.google.com/forum/#!topic/itsnat/13nl0P12J_s
它仍處於重發展,但最重要的功能都已經實現了。
什麼你想要做的是從服務器上下載一些資源文件,然後讀取它,如果它是你的應用程序的資源,對不對? –
嘗試使用LayoutInflater方法時,您獲得的錯誤是什麼? –
正確,我試圖從服務器下載一些資源文件並在應用程序中使用它。 – Mugur