2009-12-21 87 views
11

我目前正在研究一个需要我使用XML文档在Android设备上呈现表单的项目。表单必须在运行时获取并显示。我想知道是否有一种方法来标记表单XML,使用XSLT将其转换为Android布局XML,然后让设备呈现它。在Android中构建/使用运行时生成的布局XML

+1

只是受到警告。 Android在运行时会做很多工作来优化对这些文件的读取和解析。所以,如果你推出自己的产品,请准备好让它慢一点。 – haseman 2009-12-21 20:30:53

回答

6

Android仅包含一种内置方式,用于“膨胀”作为布局资源存储在APK文件中的布局XML。如果您想从其他来源“膨胀”相似(或不同)的XML,则必须自己实施,或许可以通过克隆LayoutInflater类中的某些逻辑来实现。

0

LayoutInflater.inflate方法会将XmlPullParser作为参数,因此您只需将您的动态创建的XML加载到PullParser中并将其传递给inflater即可。

+6

但是,如果您实际上阅读了该方法的文档,它说“目前在运行时通过普通XML文件使用LayoutInflater和XmlPullParser”。 – 2009-12-21 20:23:48

+0

好吧,我可以看到这是一个非常整洁的功能。 – CaseyB 2009-12-21 20:36:42

12

不幸的是,你不能仅仅克隆LayoutInflater或者使用其他这样的技巧来做到这一点 - 布局通胀完全依赖于采用AttributeSet参数的视图构造函数,它完全依赖于Context.obtainStyledAttributes方法本身完全依赖于预处理的二进制XML文件能够执行合理有效的属性解析。

您可以探索的另一种方法是在您的服务器上使用aapt工具(或更可能是其被黑客入侵的版本),将您生成的布局编译为适当的数据。不幸的是,我们目前没有办法从原始二进制blob构建XmlPullParser(它必须从AssetManager中获得此blob),因此使用此方法在客户端和服务器上都要做相当多的工作。我怀疑可以拿出一些非常整齐的东西,但这将会有很多工作。

+0

考虑到这是需要在接下来的一周半原型的东西,我认为这不是我应该调查,直到以后的日子。你会同意吗? 我已经完成了从桌面和web平台上运行之前的XML的UI构建。对于Windows Mobile应用程序,我们也有一个实现。当我有更多的时间或者出现性能问题时,我可能只需模拟这些方法并在稍后调查aapt。 – illvm 2009-12-21 22:18:55

+0

是的,这不是一个一周的项目。 :) 最简单的方法是制作一个简单的XML结构,该结构可以定义您的布局所需的内容,而不会尝试允许Android布局可以执行的任何可能的事情。解析并将其转换为视图布局的构建应该相当简单;您可以根据需要将新设施添加到XML格式。 – hackbod 2009-12-21 22:25:32