【发布时间】:2010-12-28 20:45:38
【问题描述】:
我目前正在从事一个项目,该项目需要我使用 XML 文档在 Android 设备上呈现表单。表单必须在运行时获取并显示。我想知道是否有办法标记表单 XML,使用 XSLT 将其转换为 Android 布局 XML,然后让设备呈现它。
【问题讨论】:
-
请注意。 Android 做了很多工作来优化运行时对这些文件的读取和解析。因此,如果您自己滚动,请准备好让它膨胀得慢很多。
我目前正在从事一个项目,该项目需要我使用 XML 文档在 Android 设备上呈现表单。表单必须在运行时获取并显示。我想知道是否有办法标记表单 XML,使用 XSLT 将其转换为 Android 布局 XML,然后让设备呈现它。
【问题讨论】:
不幸的是,你不能只克隆 LayoutInflater 或使用其他类似的技巧来做到这一点——布局膨胀完全依赖于带有 AttributeSet 参数的视图构造函数,它完全依赖于 Context.obtainStyledAttributes 方法,它本身就是完全依赖于预处理二进制 XML 文件才能进行合理有效的属性解析。
您可以探索的另一种方法是在您的服务器上使用 aapt 工具(或更可能是它的黑客版本),将您生成的布局编译成适当的数据。不幸的是,我们目前没有办法从原始二进制 blob 构造 XmlPullParser(它必须从 AssetManager 获取这个 blob),因此使用这种方法在客户端和服务器上都有相当多的工作要做。我怀疑有人可以想出一些非常简洁的东西,但这将是很多工作。
【讨论】:
Android 仅包含一种内置方式来“膨胀”作为布局资源存储在 APK 文件中的布局 XML。如果您想从其他来源“膨胀”相似(或不同)的 XML,您必须自己实现,可能通过从 LayoutInflater 类中克隆一些逻辑。
【讨论】:
LayoutInflater.inflate 方法将 XmlPullParser 作为参数,因此您只需将动态创建的 XML 加载到 PullParser 并将其传递到充气器。
【讨论】: