【问题标题】:Rendering an Android XML layout in Java在 Java 中呈现 Android XML 布局
【发布时间】:2013-04-10 17:12:15
【问题描述】:

我正在构建一个 Java 应用程序,它是某种 Android 应用程序(APK 文件)分析器。

该应用程序将提供的主要功能之一是 Android 布局的“预览”,因此我需要一个 API 来接收 Android 布局 XML 和一些配置参数,例如屏幕分辨率和主题,并返回呈现的布局,因为它会出现在运行应用程序的设备上(与真正的 Android 平台的图形一致性很重要)以及 View 对象的位置数据(以便允许用户通过单击来选择视图)。在第一阶段,我不希望该功能反映以编程方式进行的布局更改,而只反映 XML 中定义的 View 对象和资源图形。

我的想法是使用布局编辑器的源代码,例如 ADT 的编辑器或 DroidDraw,并将其集成到我的框架中,但后来我想知道 - 也许更好的方法是使用 android API 本身为我呈现布局(这更好主要是因为我不需要为更高版本的操作系统重写我的代码)。

所以我的问题是:API 是否允许此类操作?还是有更好的方法?

欢迎任何建议和见解:)

【问题讨论】:

    标签: java android android-layout rendering


    【解决方案1】:

    API 是否允许此类操作?

    如果您所说的“java 应用程序”是指在您的 PC 上运行的应用程序,那么不是。甚至在 Android API 中调用任何东西都没有直接的方法。我建议您使用第一种方法来集成一些现有的源代码。

    也就是说,这也不是一项简单的任务。此外,如果您正在分析 APK,您将使用二进制 XML 文件,而不是您在开发时看到的易于阅读的纯文本文件(假设是 ADT/DroidDraw 使用的)。可能有源代码out there也可以处理。

    您也可以考虑查看 Android 本身的源代码,但我想您必须重新实现一堆渲染代码,所以这也不是一件容易的事。

    在第一阶段,我不希望该功能反映以编程方式进行的布局更改,而只反映 XML 中定义的 View 对象和资源图形。

    以合理的方式反映以编程方式进行的布局更改几乎是不可能的。

    【讨论】:

    • 感谢您的详细回答。是的,我的意思是在 PC 上运行的应用程序。至于反编译二进制 XML - 我已经解决了这个问题,并且我有一个目录,其中包含源格式的所有布局和其他资源。
    【解决方案2】:

    这项任务绝对是可能的,但是,它一点也不简单。我建议看一下 Android Studio 的源代码,更具体地说,有一个名为 LayoutLib 的工具。

    这是 IDE 的布局预览/编辑器用于呈现布局的工具。您可以使用它来呈现您拥有源代码的布局和视图。不幸的是,它没有很好的文档记录,所以你必须从 IDE 的源代码中弄清楚它的用法。

    【讨论】:

      【解决方案3】:

      开源的Itsnat可以直接渲染加载的XML Android Layout文件。它有一个示例应用程序,将标准(二进制编译)版本与动态版本进行比较。我对它的工作表明它很好地再现了 LinearLayout/Relativelayout 等的所有怪癖。https://github.com/jmarranz/itsnat

      【讨论】:

        猜你喜欢
        • 2016-01-30
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 2018-11-23
        • 1970-01-01
        • 2021-08-01
        • 2016-11-16
        相关资源
        最近更新 更多