Utilisation des menus

Utilisation des menus

Les activités Android peuvent comprendre des menus, comme les applications de bureau et de certains systèmes mobiles – Palm OS et Windows Mobile, notamment. Certains terminaux Android disposent même d’une touche dédiée à leur ouverture ; les autres offrent d’autres moyens pour les faire apparaître. En outre, vous pouvez créer des menus contextuels, comme dans la plupart des kits de développement graphiques. Dans une interface utilisateur classique, ce type de menu s’ouvre en cliquant sur le bouton droit de la souris ; sur les terminaux mobiles, ils apparaissent généralement lorsque l’utilisateur touche un widget pendant un certain temps. Si un TextView dispose d’un menu contextuel et que le terminal a un écran tactile, par exemple, vous pouvez toucher le label pendant une seconde ou deux : un menu surgira alors pour vous permettre de choisir l’une des entrées du menu. La construction des menus Android est différente de celle de la plupart des autres kits de développement. Bien que vous puissiez ajouter des éléments à un menu, vous n’avez pas un contrôle total sur son contenu ni sur le moment où il est construit. Une partie des menus est, en effet, définie par le système et cette portion est gérée par Android lui-même.

Variantes de menus

Android distingue les « menus d’options » des « menus contextuels ». Les premiers se déclenchent en appuyant sur le bouton « Menu » du terminal, tandis que les seconds s’ouvrent lorsqu’on maintient une pression du doigt sur le widget qui dispose de ce menu. En outre, les menus d’option fonctionnent selon deux modes : icône et étendu. Lorsque l’utilisateur appuie sur le bouton Menu, le menu est en mode icône et n’affiche que les six premiers choix sous la forme de gros boutons faciles à sélectionner, disposés en ligne en bas de l’écran. Si ce menu compte plus de six choix, le sixième bouton affiche « Plus » – cliquer sur cette option fait passer le menu en mode étendu, qui affiche tous les choix restants. L’utilisateur peut bien sûr faire défiler le menu afin d’effectuer n’importe quel choix.

Les menus d’options

Au lieu de construire le menu d’options de votre activité dans onCreate(), comme le reste de votre interface graphique, vous devez implémenter la méthode onCreateOptionsMenu() en lui passant une instance de la classe Menu. La première opération à réaliser consiste à établir un chaînage vers la méthode de la superclasse (via super.onCreateOptionsMenu(menu)), afin qu’Android puisse lui ajouter les choix nécessaires. Puis vous pouvez ajouter les vôtres, comme on l’expliquera bientôt. Si vous devez modifier le menu au cours de l’activité (pour, par exemple, désactiver un choix devenu inadéquat), il suffit de manipuler l’instance de Menu que vous avez transmise à onCreateOptionsMenu() ou d’implémenter la méthode onPrepareOptionsMenu(), qui est appelée avant chaque affichage du menu. Pour ajouter des choix au menu, utilisez la méthode add(). Celle-ci est surchargée pour pouvoir recevoir des combinaisons des paramètres suivants : ● Un identifiant de groupe (un entier), qui doit être NONE lorsque vous ne regroupez pas un ensemble d’options de menu, utilisable avec setGroupCheckable(). ● Un identifiant de choix (également un entier) servant à identifier la sélection dans la méthode de rappel onOptionsItemSelected() lorsqu’une option du menu a été choisie. ● Un identifiant d’ordre (encore un entier), indiquant l’emplacement du choix dans le menu lorsque ce dernier contient des options ajoutées par Android – pour l’instant, contentez-vous d’utiliser NONE. ● Le texte du choix, sous la forme d’une String ou d’un identifiant de ressource. Toutes les méthodes add() renvoient une instance de MenuItem qui vous permet ensuite de modifier tous les réglages du choix concerné (son texte, par exemple). Vous pouvez  également mettre en place un raccourci pour un choix – un mnémonique d’un seul caractère, permettant de sélectionner ce choix lorsque le menu est visible. Android permet d’utiliser des raccourcis alphabétiques et numériques, mis en place respectivement par setAlphabeticShortcut() et setNumericShortcut(). Le menu est placé en mode raccourci alphabétique en passant le paramètre true à sa méthode setQwertyMode(). Les identifiants de choix et de groupe sont des clés servant à déverrouiller certaines fonctionnalités supplémentaires des menus : ● Un appel à MenuItem#setCheckable() avec un identifiant de choix ajoute une case à cocher à côté du titre de ce choix. La valeur de cette case bascule lorsque l’utilisateur sélectionne ce choix. ● Un appel à Menu#setGroupCheckable() avec un identifiant de groupe permet de rendre un ensemble de choix mutuellement exclusifs en leur associant des boutons radio, afin de ne pouvoir cocher qu’une seule option du groupe à un instant donné. Vous pouvez également appeler addIntentOptions() pour remplir le menu avec des choix correspondant aux activités d’un Intent (voir Chapitre 25). Enfin, il est possible de créer des sous-menus à la volée, en appelant addSubMenu() avec les mêmes paramètres que ceux d’addMenu(). Android appellera alors onCreatePanelMenu() en lui passant l’identifiant du choix du sous-menu, ainsi qu’une autre instance de Menu représentant le sous-menu lui-même. Comme avec onCreateOptionsMenu(), vous devez établir un chaînage avec la méthode de la superclasse, puis ajouter les choix au sous-menu. La seule restriction est que vous ne pouvez pas imbriquer sans fin les sousmenus : un menu peut avoir un sous-menu, mais ce dernier ne peut pas contenir lui-même de sous-sous-menu. Votre activité sera prévenue d’un choix de l’utilisateur par la méthode de rappel onOptionsItemSelected(). Vous recevrez alors l’objet MenuItem correspondant à ce choix. Un motif de conception classique consiste à utiliser une instruction switch() avec l’identifiant du menu (item.getItemId()), afin d’exécuter l’action appropriée. Notez qu’onOptionsItemSelected() est utilisée indépendamment du fait que l’option choisie soit un choix du menu de base ou d’un sous-menu. 

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *