重新使用 xml 个带有风味的菜单模板

Re-use of xml menu template with flavors

我目前正在制作一款具有 3 种风格的应用。我在 DrawerLayout 中使用 NavigationView 进行导航。我已经从 NavigationView 中的 XML 指定了我的菜单,如下所示:

...
app:menu="@menu/activity_main_drawer"
...

这适用于所有 3 种口味。 activity_main_drawer 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">

        <item
            android:id="@+id/nav_categories"
            android:title="Categories" />

        <item
            android:id="@+id/nav_map"
            android:title="Map" />

    </group>
</menu>

这用于我的开始,主要 activity 称为 MainActivity。问题是,除了 API url 之外,应用程序不应该以任何方式进行区分。现在,我们只需要删除其中一个应用程序的链接之一。

我能想出的第一个解决方案是将 activity_main_drawer 复制到我的风味特定资源菜单文件夹并放入 android:visible="false" 以达到其目的,但随后我们需要维护两个菜单(并且有可能忘记更新特定的风味)。我不能只是简单地从风味特定项目的菜单中删除 <item>,因为那样 ID 将不可用并且应用程序将无法编译。

我的另一种可能性是在 运行 时删除该项目,在我检查了应用程序 运行 的风格后。

我想深入了解哪种方法更好,以及如何最大限度地减少 code/text 复制的数量。

Now, we need to remove one of the links only for one of the apps.

我假设 "links" 是指 <item> 个元素之一。

如果是:

  • 定义一个 boolean 资源,这里称为 i_can_haz_link,在您的 main 源集中 true

  • 将相同的 boolean 资源重新定义为 false 不应具有此 link

  • 在受影响的<item>

  • 中使用android:visible="@bool/i_can_haz_link"

对于您问题中的这两种方法,我都会采用这种方法。在问题中的两个中,我可能会使用重复的 menu 资源,这样 Java 代码就可以保持干净且不受影响。