XmlResourceParser实现

时间:2013-09-05 16:47:13

标签: android interface-implementation

我需要从服务器动态加载xml布局。 LayoutInflater具有使用XmlPullParser的inflate方法。我试过了,但它不起作用。

查看Android源代码,结果发现这些inflate方法是使用XmlResourceParser调用的。 Android使用的实现是XmlBlock.Parser,但这不是公共API。

我可以使用XmlResourceParser公共实现吗?

4 个答案:

答案 0 :(得分:4)

您可以使用Android documentation中描述的传统XmlPullParser

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.

我想,如果Android自己只依赖预处理资源,那么你应该自己实现LayoutInflater.Factory2

答案 1 :(得分:2)

实际上,您无法动态加载xml布局。 android系统不需要XmlResourceParser。当android ui系统为资源充气时,它只是将解析器转换为它的私有实现,一个二进制xml源解析器(我忘记了类名)。

1年前,我试过这个,花了很多次。所以,不要再浪费你的时间了。

答案 2 :(得分:2)

是的,现在可以使用ItsNat Droid。

看看这个摘要:

https://groups.google.com/forum/#!topic/itsnat/13nl0P12J_s

它仍处于重大发展阶段,但最重要的功能已经实施。

答案 3 :(得分:1)

  

出于性能原因,视图通胀在很大程度上依赖于在构建时完成的XML文件的预处理。因此,目前无法在运行时对普通XML文件使用带有XmlPullParser的LayoutInflater。

不能说它无法完成。但是您需要在xml文件上运行构建工具才能使其格式正确。然后你可以嘲笑一个' Context'和'资源'在' LayoutInflator'

中使用时返回下载的数据