【问题标题】:Create, store and inflate custom layout in runtime在运行时创建、存储和扩展自定义布局
【发布时间】:2011-07-30 01:20:54
【问题描述】:

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

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

有没有人遇到过这样的问题?有什么建议?

【问题讨论】:

标签: android android-layout android-widget android-xml


【解决方案1】:

查看LayoutInflater 的膨胀方法。实际上,您可以给它任何XmlPullParser 作为它的源,而它又可以在给定任何Reader 的情况下构造。

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

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

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

更新 - 如LayoutInflater 文档中所述,这将不起作用。

【讨论】:

  • 这实际上不适用于 xml 布局。如果你将一个简单的 XML 传递给 XmlPullParser,然后尝试调用 inflater.inflate(xpp, null) 方法,它会抛出一个异常
  • 原因是 - LayoutInflater 本身使用 XmlBlock.Parser,这是一个创建用于处理来自 xml 布局的二进制文件的解析器。而 XmlPullParserFactory 创建一个简单的 org.kxml2.io.KXmlParser 的实例
  • 我的立场是正确的!谢谢你指出这一点。然后,这是 stackoverflow.com/questions/1942104/… 的副本
  • 是的,好像是重复的。奇怪的是没有可用的工具来从字符串膨胀布局......即使性能不好,那又怎样?..
  • 然后用 Java 做。解析 XML,然后创建具有所需属性的必要视图。然后让我们知道它的表现;)
猜你喜欢
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 2012-10-28
  • 2013-07-25
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
相关资源
最近更新 更多