Voici un nouveau tutoriel ! Nous allons apprendre à créer des menus.
Accrochez vous ça va commencer ! :)

Il existe 3 sortes de menus sous Android:

  • Le premier est l’ « optionMenu »
  • Ensuite il y a le « contextMenu »
  • Pour finir il y a le « SubtMenu »

1- L’ « OptionMenu »


Ce menu s’ouvre lorsque vous cliquez sur le bouton menu.

Pour créer un menu, nous devons créer un fichier de ressource XML décrivant le menu.

Voici à quoi ressemble le fichier option_menu.xml:



	
	

Il faut donc renseigner un id, un titre, et on peut ajouter une icône (pas obligatoire).

Puis dans le code java nous devons surcharger la méthode onCreateOptionsMenu().
C’est cette méthode qui est appelée pendant la création du menu d’options.
Nous allons donc indiquer comment créer celui à l’aide de ce code:

        @Override
	public boolean onCreateOptionsMenu(Menu menu) {
	     MenuInflater inflater = getMenuInflater();
	     inflater.inflate(R.menu.option_menu, menu);
	     return true;
	}

J’emploierai le terme inflate dans la suite de l’article. Ce terme est souvent utilisé lorsqu’on parle d’interfaces graphiques sous Android, il décrit l’action de créer visuellement le composant.

Cette fonction se charge donc de faire l’inflate du menu à partir du fichier XML. Ceci grace à l’objet MenuInflater.
Nous avons ce résultat:

Nous allons maintenant gérer les click sur les options du menu. Pour ceci, nous allons surcharger la méthode onOptionsItemSelected().

Voici le code de la méthode:

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

	    switch (item.getItemId()) {
		    case R.id.toast_hello:
		    	Toast.makeText(this, "Hello world!", Toast.LENGTH_SHORT).show();
		        return true;
		    case R.id.google:
		    	Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.fr"));
		    	startActivity(intent);
		        return true;
		    default:
		        return super.onOptionsItemSelected(item);
	    }
	}

Il suffit de tester l’id de l’item via la méthode: getItemId() de l’objet Item passé en paramètre. Puis dans le switch() on exécute le code que l’on veut. Ici j’affiche un Toast (vu dans le tutoriel précédent) ou j’affiche une page web via un itent.

2- Le contextMenu

Le contextMenu s’ouvre lorsqu’il y a un long click qui est exercé sur un composant héritant de la class View.
Le plus souvent, ce type de menu est utilisé pour effectuer des actions sur les items s’une listView.

Si l’utilisateur exerce un long click sur l’item d’une listView et que cette listView est enregistrer pour fournir un contextMenu, le menu s’affichera.

Enregistrer un composant

Il vous faut donc enregistrer le composant dès la méthode onCreate().
Tout d’abord il faut ajouter un TextView dans l’linterface:

	

Ensuite voici le code pour enregistrer le TextView:

    registerForContextMenu(findViewById(R.id.tv_msg));

Désormais, notre TextView peut déclencher le contextMenu sur un long click.

Comme précédemment, nous définissons le menu dans le fichier context_menu.xml:



	
	

Puis on surcharge la méthode onCreateContextMenu():

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
	                                ContextMenuInfo menuInfo) {
	  super.onCreateContextMenu(menu, v, menuInfo);
	  MenuInflater inflater = getMenuInflater();
	  inflater.inflate(R.menu.option_menu, menu);
	}

Pour finir il faut surcharger la méthode onContextItemSelected():

	@Override
	public boolean onContextItemSelected(MenuItem item) {

	  switch (item.getItemId()) {
		  case R.id.say_hello:
			  Toast.makeText(this, "Hello world!", Toast.LENGTH_SHORT).show();
			  return true;
		  case R.id.google:
			  Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.fr"));
		      startActivity(intent);
		  return true;
		  default:
		    return super.onContextItemSelected(item);
	  }
	}

3- subMenus

Les subMenu sont des menus secondaires utilisés pour faire gagner de la place. C’est toujours le même principe sauf que le fichier XML est comme ceci:



    
        

            
            
        

    

Il suffit ensuite de surcharger les méthodes onCreateOptionsMenu() pour faire l’inflate et onOptionsItemSelected() pour gérer le long click.

Hé voila ! Vous pouvez désormais ajouter des menus à vos applications Android ;) .
J’espère que ce tuto vous sera utile ! ;)

Sources du projet