我需要从服务器动态加载 xml 布局。LayoutInflater 具有使用 XmlPullParser 的膨胀方法。我已经尝试过了,但它不起作用。
查看 Android 源代码,发现这些膨胀方法是使用 XmlResourceParser 调用的。Android 使用的实现是 XmlBlock.Parser,但这不是公共 API。
是否有我可以使用的 XmlResourceParser 公共实现?
我需要从服务器动态加载 xml 布局。LayoutInflater 具有使用 XmlPullParser 的膨胀方法。我已经尝试过了,但它不起作用。
查看 Android 源代码,发现这些膨胀方法是使用 XmlResourceParser 调用的。Android 使用的实现是 XmlBlock.Parser,但这不是公共 API。
是否有我可以使用的 XmlResourceParser 公共实现?
您可以使用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 自己只依赖预处理资源,也许你应该自己实现。
事实上,您不能动态加载 xml 布局。android 系统不需要 XmlResourceParser。当android ui系统膨胀资源时,它只是将解析器转换为它的私有实现,一个二进制xml源解析器(我忘记了类名)。
1年前,我试过这个,花了很多很多次。所以,不要再像我一样浪费你的时间了。
是的,现在可以使用 ItsNat Droid。
看看这个总结:
https://groups.google.com/forum/#!topic/itsnat/13nl0P12J_s
它仍在大力开发中,但最重要的功能已经实现。
出于性能原因,视图膨胀在很大程度上依赖于在构建时完成的 XML 文件的预处理。因此,目前无法在运行时在纯 XML 文件上使用带有 XmlPullParser 的 LayoutInflater。
这并不是说它不能完成。但是您需要在 xml 文件上运行构建工具才能将其转换为正确的格式。然后,您可能可以模拟在“LayoutInflator”中使用时返回下载数据的“上下文”和“资源”