【问题标题】:How to dynamically modify Android layout XML如何动态修改Android布局XML
【发布时间】:2013-12-24 06:01:54
【问题描述】:

我是 android 开发的新手,我将开发一个 android 应用程序。在这个应用程序中,我想动态生成 xml 布局。登录到应用程序后,服务器将发送带有控件描述的 xml 模板,包括不同的属性描述(每个控件的验证、最大长度、控件的大小等),这意味着不会有预定义的 xml 布局。

我的计划是,从下载的 xml 模板中,我将创建一个 xml 布局并将该 xml 存储在 sqlite 数据库中。当用户单击记录时,我想向用户显示这个动态创建的表单。

是否可以修改xml布局(比如设置innerxml)?

【问题讨论】:

  • 使用 html 页面从服务器加载您的动态视图。
  • 网络服务只是发送一个模板xml。登录并下载此模板后,该应用程序也应该离线工作

标签: android android-layout


【解决方案1】:

你可以试试这样的:

LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View myView = inflater.inflate(myXmlPullParser, null);

setContentView(myView);

【讨论】:

    【解决方案2】:

    基于View documentation:

    重要出于性能原因,视图膨胀在很大程度上依赖于在构建时完成的 XML 文件的预处理。因此,目前无法在运行时将 LayoutInflater 与 XmlPullParser 一起用于纯 XML 文件。

    如果布局不在布局 res 目录中,则不能扩展布局。

    【讨论】:

    • res目录下会有一个layout文件,是否可以动态改变那个layout文件的innerxml(替换为新创建的layout)???
    • 你需要先给 innerxml 充气。为此,您需要LayoutInflater.inflate()。但是,此方法不接受动态加载。它必须来自res 文件夹。我的结论是:你还是做不到。
    • @user922834 "是否可以动态更改该布局文件的 innerxml(替换为新创建的布局)???" - 不!因为是编译的。
    【解决方案3】:

    这是可能的。采用一个只有线性布局的 xml 布局,在 onCreate 中使用 id 访问布局并以编程方式创建所有视图,并将其作为子视图添加到线性布局中,然后将该 xml 布局设置为 setContentView。 稍后您想在创建视图后添加更多视图,您可以运行 UI 线程并添加视图。

    【讨论】:

      【解决方案4】:

      我认为与其动态创建 xml,不如考虑以编程方式创建所需的视图, 如果它是一个高级视图,您应该按照 TheWAlkingCube 的建议进行操作,动态扩展一个 xml 视图。

      【讨论】:

        【解决方案5】:

        Android 不完全支持您的工作方式,但您可以动态构建自己的布局。

        创建您自己的 TemplateBuilder 类。此类将从您的服务器检索布局文件(并可能将其保存在您的数据库中)。可以读出 XML 文件,您可以在运行时添加每个定义的项目。如前所述,这不是您应该在 Android 中工作的传统方式,但它将是您的最佳选择。

        如果您有某些 ViewGroups 或布局将更频繁地在布局中使用,您可以在 res 文件夹中将它们定义为 XML 文件,并在需要时对其进行扩充。创建预定义的layout-blocks,您可以随时根据需要进行扩展,并从字面上构建您的自定义布局。

        有关在运行时添加视图的示例,您可以访问以下链接: http://www.dreamincode.net/forums/topic/130521-android-part-iii-dynamic-layouts/

        【讨论】:

          【解决方案6】:

          如果你坚持这样做,你必须在你的程序中解析接收到的 xml 文件,并根据接收到的文件中的请求方式以编程方式添加 xml 布局的每个视图

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-23
            相关资源
            最近更新 更多