首页 > 解决方案 > 多个 Android 应用程序依赖于具有不同布局文件的模块中的相同片段

问题描述

我的公司正在对其当前应用程序进行“克隆”,该应用程序大部分具有相同的功能,但用户界面将完全不同。有些屏幕只有不同的颜色,而另一些则需要完全不同的布局。

该应用程序目前分为多个模块,可在两个应用程序中使用,使将来的维护更容易。但是,我正在努力寻找一种在片段中为每个应用程序使用不同布局的好方法。

例如:片段 A 在第一个应用程序中具有布局 X。片段 A 在第二个应用程序中需要布局 Y,这会有些不同,但会包含具有相同 id 的相同视图。

我目前的想法:创建只包含布局文件的模块。将模块添加为应用程序级依赖项,并使用 dagger 将它们注入每个片段。这感觉像是很多工作,也意味着包含片段的模块没有引用布局中的 id,这使得数据绑定甚至 findViewById() 都不可能,除非我也注入 id。您可以看到这如何很快成为一个大问题。

另一个想法:在每个模块中为颜色和布局使用不同的风格。但这将使构建项目变得相当复杂,这意味着 2 个不同的应用程序将不得不引用每个模块工件的不同风格。

有人有更好的想法/解决方案吗?

标签: androidmodule

解决方案


使用 Flavors(又名“Build Variants”)并创建不同的 Layout/Java 文件夹。

  • /src
    • /主要的
      • /java
        • /..../ExampleClass.java(不要直接实例化/使用这个类,而是使用 Flavour 的扩展版本)
      • /res
        • /布局/example.xml
    • /Flavour1(由 Debug 和 Release 使用)
    • /Flavour1调试
      • /java/.../ExtendedExampleClass.java
    • /Flavour1Release
      • /java/.../ExtendedExampleClass.java
      • /res/layout/example_modified1.xml
    • /Flavour2(由 Debug 和 Release 使用)
    • /Flavour2Debug
      • /java/.../ExtendedExampleClass.java
    • /Flavour2Release
      • /java/.../ExtendedExampleClass.java
      • /res/layout/example_modified2.xml

通过这种方式,即使布局/资源不同,您也可以在所有风格中使用相同的类(“ ExtendedExampleClass ”)方法/字段。不经意间,所有扩展类都应该公开相​​同的方法/字段,或者在每个风味中,您应该创建使用专用方法/字段的其他类扩展。


推荐阅读