我需要从服务器动态加载xml布局。 LayoutInflater具有使用XmlPullParser的inflate方法。我试过了,但它不起作用。
查看Android源代码,结果发现这些inflate方法是使用XmlResourceParser调用的。 Android使用的实现是XmlBlock.Parser,但这不是公共API。
我可以使用XmlResourceParser公共实现吗?
答案 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'
中使用时返回下载的数据