6

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

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

是否有我可以使用的 XmlResourceParser 公共实现?

4

4 回答 4

4

您可以使用Android 文档XmlPullParser中描述的传统方法:

InputStream yourRemoteLayout = ...;
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(yourRemoteLayout, "someEncoding");
AttributeSet attributes = Xml.asAttributeSet(parser);

有关更多详细信息,请参阅XmlPullParser 文档中的说明。


编辑:来自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 自己只依赖预处理资源,也许你应该自己实现。

于 2013-09-09T11:06:21.010 回答
2

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

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

于 2013-09-11T09:54:56.933 回答
2

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

看看这个总结:

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

它仍在大力开发中,但最重要的功能已经实现。

于 2014-11-16T13:25:48.990 回答
1

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

这并不是说它不能完成。但是您需要在 xml 文件上运行构建工具才能将其转换为正确的格式。然后,您可能可以模拟在“LayoutInflator”中使用时返回下载数据的“上下文”和“资源”

于 2013-09-16T07:50:10.397 回答