加载由用户创建的布局

我正在尝试加载由用户创建的XML文件,以便在我的应用中使用它。 我知道无法将XML文件用作资源,因为布局文件是在构建APK进程中编译的。 无论如何要在布局文件夹外部使用/创建/加载布局?


您无法膨胀任意XML,因为Android项目中的XML文件在构建时得到处理并转换为二进制格式。 换句话说,您只能通过Java API以编程方式构建布局。

你可以用一个标准的XML解析器解析用户的文件(例如XmlPullParser并自己构建视图,基本上你会重新实现LayoutInflater ,你可以在这里找到联机的源代码。

有一点需要注意的是用户的XML根本无法引用资源。 例如,他们不能做类似android:textColor="@color/some_color" 。 构建处理将这些引用转换为指向资源值的指针,而如果只是简单地使用纯XML读取它,则只是文本"@color/some_color"

也许不是让用户创建完整的Android布局XML,而应该选择一个有限的支持子集,并定义一个更简单的描述这些自定义布局的方法。 那么你不必使用XML,你可以用你想要的东西来定义一个自定义的“语言”。 通过这种方式,您可以将用户限制在相对简单的API中,如文本颜色; 您只需将您自定义语言中定义的某个字段映射到对textView.setTextColor()的调用即可。


您可以从您的文件创建一个XmlPullParser,并将其传递给布局压缩器。

要从文件创建XMLPullParser,可以按照以下示例进行操作:https://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html

在拥有XMLPullParser对象后,您可以调用此方法:https://developer.android.com/reference/android/view/LayoutInflater.html#inflate(org.xmlpull.v1.XmlPullParser,android.view.ViewGroup)

您需要一个ViewGroup,它将成为视图的父级。 如果您需要该视图为活动,我建议您使用布局创建一个空的活动,并将解析后的布局添加到空白布局。 不要试图在没有父母的情况下膨胀布局,你可以在不同的设备中获得不同的结果。

链接地址: http://www.djcxy.com/p/62799.html

上一篇: Load layout created by user

下一篇: Android Studio Google JAR file causing GC overhead limit exceeded error