在运行时创建,存储和扩展自定义布局

Ant*_*ton 8 android android-widget android-layout android-xml

我正在尝试找到解决以下问题的方法.我工作的应用程序要求用户通过自定义UI构建器生成自定义UI(简单小部件的布局).因此,用户可以在画布上堆叠小部件(大多数图像,但也包括TextViews和EditText),移动它们等等.必须将UI存储在数据库中以备将来使用.因此,应该有一些加载和扩充此UI的机制.这是主要问题.

我的第一个想法是依靠标准的Android布局机制.不幸的是,LayoutInflater使用编译成二进制形式的XML.据我所知,在运行时不可能将XML字符串编译成二进制表示.

有没有人有这种问题的经验?有什么建议?

Mat*_*lis 2

查看LayoutInflater的 inflate 方法。实际上,您可以将其指定为任何XmlPullParser作为其源,而该源又可以根据给定的任何来构造Reader

换句话说,您可以使用几乎任何字符流作为膨胀的 xml 源。

XmlPullParser文档的开头为您提供了创建拉解析器的基本轮廓:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader("<foo>Hello World!</foo>"));
Run Code Online (Sandbox Code Playgroud)

更新- 正如文档中提到的,这是行不通的LayoutInflater

  • 原因是 - LayoutInflater 本身使用 XmlBlock.Parser,这是一个为处理 xml 布局的二进制文件而创建的解析器。而 XmlPullParserFactory 创建一个简单的 org.kxml2.io.KXmlParser 实例 (3认同)