重新使用 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 代码就可以保持干净且不受影响。
我目前正在制作一款具有 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 代码就可以保持干净且不受影响。