J'ai une application qui a 3 saveurs différentes, full
, part1
et part2
.Comment cacher ou ajouter des éléments de menu pour Flavour?
Tous les différents goûts ont des noms de paquets différents, donc je peux les expédier en différentes applications.
Maintenant, je veux que seulement part1
obtienne un élément de menu appelé Reload
. Les 2 autres saveurs ne devraient pas avoir cet élément de menu. Est-ce possible?
J'ai essayé les suivantes avec les ressources du menu:
app
|
+-src
|
+-full
|
+-main
| |
| +-res
| |
| +-menu
| |
| +-main_activity.xml
|
+-part1
| |
| +-res
| |
| +-menu
| |
| +-main_activity.xml
|
+-part2
Où main_activity.xml
pour part1
est:
<?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>
Et main_activity.xml
pour main
est:
<?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>
Cependant, si je construire l'ap p dans une autre variante de construction que part1
, je reçois une erreur de compilation dans mon MainActivity
où je dois réagir à la sélection du menu:
@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);
}
}
Il est bien évident pourquoi. Mais avez-vous une suggestion quant à la solution pour personnaliser les menus pour différentes saveurs de construction?
vous pourriez avoir une BaseActivity avec le code commun et différentes MainActivity par saveur, où vous fournissez une version différente de 'onOptionsItemSelected' – Blackbelt