39 votes

La manipulation de l'manquant bouton de MENU dans les nouvelles versions d'Android (3.x et plus)

Je suis un fan de la touche menu utilisée dans Android <3.0, comme il a été très utile pour mon jeu apps - il m'a permis de prendre d'importantes mais le gameplay pertinence de la fonctionnalité (économie de jeu, de référence info liens) et de le placer quelque part où il n'a pas encombrer l'interface principale du jeu, mais reste facilement accessible (le menu options).

Cette utilisation des touches est devenue un problème avec la version 3.0, car il supprime le bouton MENU et substitué avec la Barre d'Action. La barre d'Action est vraiment pas adapté pour un jeu qui aime courir en plein écran, de sorte que c'était une vraie douleur. Pas de barre d'action - pas d'accès au menu d'options. Cependant, je ne pouvais sorte de l'ignorer pendant un certain temps, puisque je n'ai pas que de nombreux utilisateurs de tablettes et n'avait pas le temps de tester ça.

Cependant, l'ICS en fait un problème grave, car le bouton de MENU n'est évidemment pas de revenir. Maintenant, je ne veux pas seulement faire face à ce problèmes sur les tablettes, mais sur les téléphones.

Ma première solution à ce problème a été de placer simplement une touche dans mon interface graphique pour remplacer le disque dur bouton MENU

this.openOptionsMenu();

Et tout est remis à fonctionner parfaitement dans ICS.

Toutefois, cela ne fonctionne pas sur le Nid d'abeille. L'appel de openOptionsMenu ne fait absolument rien si vous n'avez pas l'ActionBar visible.

Toute réflexion sur la façon de traiter ce problème?

  • Je suppose que je pourrais toujours revenir en arrière à l'aide de TargetSDK < 11 (ainsi de forcer l'ActionBar à apparaître sur les tablettes), mais aussi loin que je peux voir, ce n'est que repousser le problème dans le futur, que je préfère ne pas le faire.

  • Déposer les Options de Menu entièrement, et d'aller uniquement à l'aide des Menus contextuels? [Précision: Par cela, je veux dire qu'au lieu d'ouvrir un menu d'options - je utiliser les menus contextuels depuis - au moins pour l'instant, ces travaux sur tous les appareils].

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

19voto

havexz Points 6707

Permettez-moi de partager un autre scénario où le Bouton de Menu devient critique, même si elle n'est pas un jeu.

J'ai app mettre en œuvre ses propres barres d'outils qui se comportent en quelque sorte comme ActionBar. Bon je n'ai que coz de mon application a été publié avec le sdk 1.5. À l'époque, il n'y a pas un tel concept. Et pour accueillir pour mes barres d'outils-je cacher le défaut de la barre de titre. Mais certaines de ces actions sont effectuées grâce à des fonctionnalités Menu.

Maintenant, depuis que dans le Galaxy Nexus, il n'y a pas de bouton Menu si vous n'êtes pas à l'aide de ActionBar et c'est me faire mal parce que mon application prend toujours en charge de 1.5.

Bien il existe diverses solutions, mais aucune n'est facile.

Cela dit, le seul travail que j'ai est de donner à l'utilisateur toutes les options sur ma barre d'outils, donc il n'est pas nécessaire pour le 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 soln dans un jeu comme jeu aura un seul contexte dans lequel il est en cours d'exécution par rapport à avoir sur le menu contextuel des éléments de la liste où chaque élément est un contexte différent.

BTW, si openOptionsMenu fonctionne sur ICS et vous pouvez fossé en Nid d'abeille après un certain temps (et encore aujourd'hui le nombre d'utilisateurs est trop faible), puis essayez de donner à la fois des menus en fonction de la version.

EDIT: et Bien il y a une autre manière également d'afficher le MENU s/w bouton en dessous de la barre de navigation. Il suffit de régler l' targetSdkVersion à moins de 11. Pour plus de détails, veuillez lire l'ensemble de soln.

2voto

CommonsWare Points 402670

Cependant, l'ICS en fait un problème grave, car le bouton de MENU n'est évidemment pas de revenir.

Plus précisément, c'est aux fabricants d'appareil s'éteint boutons à l'écran ou pas pour des choses comme le MENU. Citant la Compatibilité Document de Définition pour Android 4.0:

Le Home, Menu et Retour fonctions sont essentielles à la navigation Android paradigme. Appareil implémentations Ces fonctions accessibles à l'utilisateur à tout moment lors de l'exécution d'applications. Ces fonctions PEUVENT être en œuvre par le biais dédié boutons physiques (comme la mécanique ou tactile capacitif de boutons), ou PEUT-être mis en œuvre à l'aide d'un logiciel dédié, des clés, des gestes, écran tactile, etc.

Donc, vous ne pouvez pas compter sur l'existence d'un hors-écran, bouton MENU, mais il pourrait bien en être un.

Toute réflexion sur la façon de traiter ce problème?

Écrivez votre propre "menu" dans le cadre de votre INTERFACE du jeu. Je ne voudrais pas s'attendre à un jeu qui pense qu'il a besoin du plein écran pour utiliser le menu options -- en fait, je ne me souviens pas avoir déjà vu un jeu qui fait ça (même si, certes, je ne suis pas un grand joueur de jeu). Tous les jeux que j'ai joué ne rien faire sur un MENU, appuyez sur. Plutôt, tout ce qui pourrait être considéré comme un "menu" est mis en œuvre directement dans l'INTERFACE du jeu (par exemple, un bouton qui mène à un écran, mise en forme dans le jeu de l'INTERFACE utilisateur de look-and-feel, qui offre un choix de choses à faire).

Déposer les Options de Menu entièrement, et d'aller uniquement à l'aide des Menus contextuels?

Ce serait terrible, car les utilisateurs ne sauront pas où à long appuyez sur pour afficher le menu.

2voto

Michael A. Points 1975

Et juste pour mettre le dernier clou dans la proverbiale cercueil de la touche menu, Google pèse avec un dernier au revoir:

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

0voto

user1076637 Points 493

Michael, j'ai été exactement dans la même situation et résolu par la mise en œuvre de mon option de menu à l'aide d'une boîte de dialogue personnaliser. Il a l'air mieux sur ICS que l'héritage de l'option de menu du bas. Il est configuré comme ceci

minSdkVersion = 8 targetSdkVersion = 14 SDK version 8 (dans eclipse paramètres.pourrait mettre au 14, mais j'aime le type de la sécurité, il fournit)

Les utilisateurs de l'API < 10 utiliser les bouton de menu et voir la série en option de menu. Les utilisateurs de l'API >= 10 voir un trois point icône (menu contextuel) dans l'application et lorsque cliquez sur obtenir mon boîte de dialogue personnaliser le menu. Ils considèrent également que la nouvelle ICS regarder dans les Paramètres, etc.

Il ne semble pas que le bouton de Menu est de retour et j'ai voulu casser l'héritage de la barrière, même si seulement <1% de mes utilisateurs de l'utilisation de ICS.

0voto

aimango Points 507

Répondre à ce récent billet de blog, ils semblent vouloir aux développeurs de commencer à utiliser les Barres d'Action sur les Menus, mais cela devient une douleur si désireux de soutenir l'API => 3.0 et de l'API < 3.0. Donc soit créer une Barre d'Action qui est compatible avec l'API < 3.0 (vous pouvez trouver des exemples dans le SDK), ou... je faisais des expériences avec cette dernière semaine:

J'ai également eu un problème où le bouton de menu n'apparaît pas sur mon ICS tablette, je crois que j'ai eu targetSdk définie à 11 à l'heure que je voulais mettre en œuvre une ActionBar. Puis j'ai mis minSdk à 3, et targetSdk à 4. À la fois le contrôle ActionBar et le menu de débordement bouton est apparu. C'est donc la solution de contournement en ce moment (au moins pour le projet sur lequel je travail).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X