web-dev-qa-db-fra.com

Gérer le bouton MENU manquant dans les nouvelles versions de Android (3.x et plus)

Je suis un fan du bouton de menu utilisé dans Android <3.0, car il était très utile pour mes applications de jeu - cela m'a permis de prendre des fonctionnalités importantes mais non pertinentes pour le gameplay (sauvegarde du jeu, référence liens info) et placez-le quelque part où il n'encombrait pas l'interface principale du jeu, mais était toujours facilement accessible (le menu des options).

Cette utilisation des touches est devenue un problème avec la version 3.0, car elle a supprimé le bouton MENU et l'a remplacé par la barre d'action. La barre d'action n'est vraiment pas adaptée à un jeu qui aime fonctionner en plein écran, ce qui a été une vraie douleur. Pas de barre d'action - pas d'accès au menu d'options. Cependant, je pouvais en quelque sorte l'ignorer pendant un certain temps, car je n'avais pas beaucoup d'utilisateurs sur les tablettes et je n'avais pas le temps de le tester.

Cependant, ICS en fait un problème sérieux, car le bouton MENU ne revient évidemment pas. Maintenant, je n'ai plus seulement à gérer ce problème sur les tablettes, mais aussi sur les téléphones.

Ma solution initiale à ce problème a été de simplement placer un bouton logiciel dans mon interface graphique pour remplacer le bouton MENU dur

this.openOptionsMenu();

Et tout est de retour à fonctionner parfaitement dans ICS.

Cependant, cela ne fonctionne pas sur Honeycomb. Appeler openOptionsMenu ne fait absolument rien si vous n'avez pas le ActionBar visible.

Avez-vous des réflexions sur la façon de gérer cela?

  • Je suppose que je pourrais toujours revenir à l'utilisation de TargetSDK <11 (forçant ainsi l'ActionBar à apparaître sur les tablettes), mais autant que je sache, cela ne fait que pousser le problème dans le futur, ce que je préférerais ne pas faire.

  • Supprimez complètement le menu Options et passez uniquement à l'utilisation des menus contextuels? [Clarification: J'entends par là qu'au lieu d'ouvrir un menu d'options - j'utilise uniquement des menus contextuels car - du moins pour l'instant - ils fonctionnent sur tous les appareils].

Intéressé à entendre ce que d'autres qui ont eu des problèmes similaires avec l'ensemble du menu Options/ActionBar ont décidé de faire.

39
Michael A.

Permettez-moi de partager un autre scénario où le bouton de menu devient critique même s'il ne s'agit pas d'un jeu.

J'ai l'application implémenter ses propres barres d'outils qui se comportent dans une certaine mesure comme ActionBar. Eh bien, je l'ai fait car mon application a été publiée avec 1.5 sdk. A cette époque, il n'y a pas de tel concept. Et pour accommoder mes barres d'outils, je cache la barre de titre par défaut. Mais certaines actions sont effectuées via la fonctionnalité Menu.

Maintenant, comme dans Galaxy Nexus, il n'y a pas de bouton Menu si vous n'utilisez pas ActionBar et cela me fait mal car mon application prend toujours en charge 1.5.

Eh bien, il existe plusieurs solutions, mais aucune n'est facile.

Cela dit, le seul moyen de contourner ce problème est de donner à l'utilisateur toutes les options de ma barre d'outils, donc il n'y a aucun besoin de Menu. Je peux le faire car je n'ai que deux actions qui ne font pas partie de la barre d'outils.

Dans votre situation, le menu contextuel sur un bouton n'est pas une mauvaise solution dans un jeu car le jeu n'aura qu'un seul contexte dans lequel il s'exécute par rapport au menu contextuel sur les éléments de liste où chaque élément est un contexte différent.

BTW si openOptionsMenu fonctionne sur ICS et que vous pouvez abandonner HoneyComb après un certain temps (même maintenant la base utilisateur est trop faible), essayez de donner les deux menus basé sur la version .

EDIT: Eh bien, il existe une autre façon d'obtenir le bouton MENU s/w dans la barre de navigation ci-dessous. Réglez simplement le targetSdkVersion sur moins de 11. Pour plus de détails veuillez lire l'intégralité de la solution

19
havexz

Cependant, ICS en fait un problème sérieux, car le bouton MENU ne revient évidemment pas.

Plus précisément, il appartient aux fabricants d'appareils d'avoir ou non des boutons hors écran pour des choses comme MENU. Citant le document de définition de compatibilité pour Android 4.0:

Les fonctions Accueil, Menu et Retour sont essentielles au paradigme de navigation Android. Les implémentations de l'appareil DOIVENT mettre ces fonctions à la disposition de l'utilisateur à tout moment lors de l'exécution des applications. Ces fonctions PEUVENT être implémentées via des boutons physiques dédiés (tels que les boutons tactiles mécaniques ou capacitifs), ou PEUVENT être mis en œuvre à l'aide de touches logicielles dédiées, de gestes, d'un écran tactile, etc.

Donc, vous ne pouvez pas compter sur l'existence d'un bouton MENU hors écran, bien qu'il puisse y en avoir un.

Avez-vous des réflexions sur la façon de gérer cela?

Écrivez votre propre "menu" dans le cadre de votre interface utilisateur de jeu. Je ne m'attendrais pas à un jeu qui pense qu'il a besoin du plein écran pour utiliser le menu d'options - en fait, je ne me souviens pas avoir vu un jeu qui a fait ça (bien que, certes, je ne suis pas un grand joueur de jeu) . Tous les jeux auxquels j'ai joué ne font rien sur une touche MENU. Au contraire, tout ce qui pourrait être considéré comme un "menu" est implémenté directement dans l'interface utilisateur du jeu (par exemple, un bouton qui mène à un écran, formaté dans l'apparence de l'interface utilisateur du jeu, qui offre des choix pour les choses à faire).

Supprimez complètement le menu Options et passez uniquement à l'utilisation des menus contextuels?

Ce serait affreux, car les utilisateurs ne sauront pas où appuyer longuement pour afficher le menu.

2
CommonsWare

Et juste pour mettre le dernier pic dans le cercueil proverbial du bouton de menu, Google fait ses adieux:

http://Android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html

2
Michael A.

Michael, j'étais exactement dans la même situation et je l'ai résolu en implémentant mon menu d'options à l'aide d'une boîte de dialogue personnalisée. Il semble mieux sur ICS que le menu d'options hérité en bas. Il est configuré comme ceci

minSdkVersion = 8 targetSdkVersion = 14 SDK build version 8 (dans les paramètres Eclipse. pourrait être défini sur 14 mais j'aime le type de sécurité qu'il fournit)

Les utilisateurs avec API <10 utilisent le bouton du menu fixe et voient le menu d'options standard. Les utilisateurs avec l'API> = 10 voient une icône à trois points (menu de débordement) dans l'application et quand cliquez sur obtenir mon menu de dialogue personnalisé. Ils voient également le nouveau look ICS dans Paramètres, etc.

Il ne semble pas que le bouton Menu revienne et je voulais briser la barrière héritée même si seulement <1% de mes utilisateurs utilisent ICS.

0
user1076637

En réponse à ce récent article de blog, ils semblent vouloir que les développeurs commencent à utiliser les barres d'action sur les menus, mais cela devient un problème s'ils souhaitent prendre en charge API => 3.0 et API <3.0. Donc, soit créez une barre d'action personnalisée compatible avec l'API <3.0 (vous pouvez trouver des exemples dans le SDK), ou ... J'expérimentais avec la semaine dernière:

J'ai également eu un problème où le bouton de menu n'apparaissait pas sur ma ICS tablette, je crois que j'avais targetSdk défini sur 11 à l'époque car je voulais implémenter un ActionBar. Ensuite, j'ai défini minSdk sur 3 et targetSdk à 4. L'ActionBar et le bouton de débordement du menu sont apparus. C'est donc la solution de contournement en ce moment (au moins pour le projet sur lequel je travaille).

0
aimango