android - 如何隐藏或添加 Flavor 的菜单项?

标签 android android-menu android-build-flavors android-flavors

我的应用有 3 种不同的风格,fullpart1part2

所有不同的口味都有不同的包名称,所以我可以将它们作为不同的应用程序发布。

现在我希望只有 part1 获得一个名为 Reload 的菜单项。其他 2 种口味不应该有这个菜单项。这可能吗?

我尝试了以下菜单资源:

app
|
+-src
  |
  +-full
  |
  +-main
  | |
  | +-res
  |   |
  |   +-menu
  |     |
  |     +-main_activity.xml
  |
  +-part1
  | |
  | +-res
  |   |
  |   +-menu
  |     |
  |     +-main_activity.xml
  |
  +-part2

part1main_activity.xml 是:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_reload"
        android:icon="@drawable/ic_reload"
        android:title="@string/action_reload"
        app:showAsAction="always"/>
</menu>

mainmain_activity.xml 是:

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

但是,如果我在 part1 之外的任何其他构建变体中构建应用程序,我会在我的 MainActivity 中遇到编译错误,我需要对菜单选择使用react:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_reload: // Compile error: This item is not available
            // TODO reload
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

这是很明显的原因。但是,您对为不同构建风格自定义菜单的解决方案有什么建议吗?

最佳答案

还有另一种方法 - 使用 bool 资源创建值文件,每种风格具有不同的值,例如:

主要/res/values/bool.xml :

 <resources>
        <bool name="show_reload">false</bool>
    </resources>

第 1 部分/res/values/bool.xml :

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="show_reload">true</bool>
</resources>

然后在您的菜单资源中根据资源设置可见性值:

<menu ..>
    <item ..
      android:visible="@bool/show_reload"
      ..
    />
</menu>

关于android - 如何隐藏或添加 Flavor 的菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36569134/

相关文章:

java - 将 Google 回合制多人游戏与 Google App Engine 集成

android - Arc 菜单项样式类似于 Android 的 tumblr 应用程序

android - 如何删除可检查菜单项的末尾填充?

android - 调试变体中的字符串资源不起作用

android - Android应用程式名称作为变量而不是静态字符串

Android 巨大的 JSONObject toString 出现 OutOfMemoryError

java - 迁移到 AndroidX - ResultReceiver 在哪里

java - 使用DexClassLoader时如何获取Activity中字段的当前值?

android - 支持 v7 ActionBarActivity,每次调用 SupportInvalidateOptionsMenu() 后调用 OnCreateOptionsMenu()