Après le tutoriel qui vous présentait l’écosystème Android, l’architecture, la mise en place de l’environnement et les concepts généraux du développement des applications Android (n’hésitez pas à commencer par là si vous l’avez loupé !), voici la deuxième partie qui passe aux choses concrètes et vous montrera comment manipuler deux composants essentiels d’Android, les ActionBar et OptionsMenu, qui vous permettront de structure la navigation de votre application.

REMARQUE : le travail de traduction n’est pas toujours aussi facile qu’on le pense. Malgré les soins que nous avons pu apporter à l’élaboration de cet article, soyez indulgents : contactez-nous via notre formulaire afin de nous notifier d’éventuels soucis. Cette suite d’article est sous licence CC et l’exploitation du contenu nous a été accordée malgré la présence de publicité sur notre site. Traducteurs et correcteurs : Arnaud F. et Loic K.

12. Menu d’option et barre de menu

 

12.1. Barre d’action

La barre d’action ActionBar est située en haut d’une Activity et permet d’afficher le titre de l’Activity, des modes de navigation ou autres éléments interactifs. L’image suivante montre la barre d’action d’une application Google typique avec des éléments interactifs et une barre de navigation.

12.2. OptionsMenu

L’application peut également ouvrir un menu qui montre une liste d’actions disponibles dans une popup. Cet OptionsMenu est disponible uniquement pour les terminaux ayant un bouton “Menu”. Dans la majorité des cas, il est préférable d’utiliser une ActionBar, qui est disponible pour les téléphones à partir d’Android 4.0 . L’image suivante montre le clic sur un bouton avec l’apparition du menu qui en résulte. Une des raisons pour lesquelles une ActionBar est préférable à l’OptionsMenu, est que la première est toujours visible alors que la seconde n’apparaît que sur demande, ainsi l’utilisateur pourrait ignorer des options disponibles.

12.3 Créer le menu

Le OptionsMenu et la ActionBar sont remplis par la méthode onCreateOptionsMenu() de votre Activity. Dans la méthode onCreateOptionsMenu(), vous pouvez créer les éléments du menu, soit par code ou à l’aide d’une ressource XML. La classe MenuInflator permet de créer des éléments définis en XML en menu. MenuInflator peut être accédé grâce à la méthode getMenuInflator() de votre Activity. La méthode onCreateOptionsMenu() est appelée une seule fois. Si vous voulez modifier votre menu en cours d’exécution de l’application vous devez utiliser la méthode onPrepareOptionsMenu(). Veuillez noter que la méthode onPrepareOptionsMenu() ne fonctionne pas avec les éléments de la ActionBar pour lesquels vous devrez utiliser la méthode invalidateOptionsMenu().

12.4 Réagir à une sélection du menu

Lorsqu’une entrée du menu est sélectionnée, la méthode onOptionsItemSelected()est levée. En paramètre vous recevrez l’entrée du menu qui a été sélectionnée, afin de pouvoir réagir différemment selon les entrées du menu.

12.5 Utiliser l’icone home

Le composant ActionBar affiche également une icône de votre application. Vous pouvez aussi ajouter une action associée à cette icône. Si vous sélectionnez cette icône la méthode onOptionsItemSelected() sera appelée avec la valeur android.R.id.home . Il est recommandé de retourner à l’Activityprincipale de votre application.

// si l’icône home est cliquée, retour à l’activité principale
case android.R.id.home:
	Intent intent = new Intent(this, OverviewActivity.class);
	intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
	startActivity(intent);
break;

12.6. Onglets dans une ActionBar

Il est également possible d’ajouter des onglets qui peuvent être utilisées pour la navigation dans une ActionBar. Généralement ce sont les Fragment qui sont utilisés pour cela. Nous allons vous l’expliquer dans le chapitre dédié au composant Fragment.

12.7. Vues personnalisées dans une ActionBar

Vous pouvez également ajouter une View personnalisée dans le composant ActionBar. Ce bout de code vous montre comment faire.

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);
 
	ActionBar actionBar = getActionBar();
	// ajout de la vue personnalisée à l’action bar
	actionBar.setCustomView(R.layout.actionbar_view);
	actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM|
	ActionBar.DISPLAY_SHOW_HOME);
}

12.8. Mode d’action contextuel

Le mode d’action contextuel active une ActionBar temporaire qui recouvre le composant ActionBar de l’application pendant la durée d’une sous-tâche particulière. Le mode d’action contextuel est généralement activé lors de la sélection d’un élément ou lors d’un appui long. Pour implémenter cela, appelez la méthode startActionMode() dans une View ou votre Activity. Cette méthode reçoit en paramètre un objet ActionMode.Callbackqui gère le cycle de vie de la barre d’action contextuelle.

12.9. Menus contextuels

Vous pouvez aussi assigner un menu contextuel à une View. Un menu contextuel est également activé si l’utilisateur effectue un appui long sur la vue. Si possible le mode d’action contextuel doit être préféré à un menu contextuel. Un menu contextuel pour une vue est enregistré via la méthode registerForContextMenu(view). La méthode onCreateContextMenu() est appelée à chaque fois que le menu contextuel est activé, étant donné que le menu contextuel est détruit après son utilisation. Android peut également ajouter des options à votre View, comme par exemple EditTextprovides qui permet de sélectionner du texte.