我的应用有 3 种不同的风格,full
、part1
和 part2
。
所有不同的口味都有不同的包名称,所以我可以将它们作为不同的应用程序发布。
现在我希望只有 part1
获得一个名为 Reload
的菜单项。其他 2 种口味不应该有这个菜单项。这可能吗?
我尝试了以下菜单资源:
app
|
+-src
|
+-full
|
+-main
| |
| +-res
| |
| +-menu
| |
| +-main_activity.xml
|
+-part1
| |
| +-res
| |
| +-menu
| |
| +-main_activity.xml
|
+-part2
part1
的 main_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>
main
的 main_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/