使用flavor

时间:2016-05-09 11:42:30

标签: android xml android-productflavors

我目前正在制作一款有3种口味的应用。我在NavigationView内使用DrawerLayout进行导航。我在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>

这用于我的名为MainActivity的主要活动。问题是,应用程序无论如何都不应该区分,除了API网址。现在,我们只需为其中一个应用删除其中一个链接。

我能想到的第一个解决方案是将activity_main_drawer复制到我的特定于风味的资源菜单文件夹中并放置android:visible="false"来实现其目的,但是我们需要维护两个菜单(并且它有可能忘记更新特定的味道一)。我不能简单地从特定于风味的项目中的菜单中删除<item>,因为ID不可用,应用程序也不会编译。

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

我想了解哪种方法更好,以及如何最小化复制的代码/文本数量。

1 个答案:

答案 0 :(得分:1)

  

现在,我们只需为其中一个应用删除其中一个链接。

我假设通过&#34;链接&#34;,你的意思是<item>个元素之一。

如果是这样的话:

  • boolean sourceset

  • 中定义i_can_haz_link资源,此处称为true,为main
  • 在不应该包含此链接的风格中重新定义boolean资源为false

  • 在受影响的android:visible="@bool/i_can_haz_link"

  • 中使用<item>

在你的问题中,我会选择这两种方法中的任何一种。在问题中的两个中,我可能会使用重复的menu资源,这样Java代码就可以保持干净且不受影响。