Comment forcer l'utilisation du menu de dépassement sur les appareils avec bouton de menu
J'aimerais avoir tous les éléments de menu qui ne rentre pas dans l'ActionBar allez dans le menu contextuel (celui qui est atteint à partir de la Barre d'Action de ne pas le bouton de menu) même sur les appareils qui ne ont un bouton de Menu. Cela semble beaucoup plus intuitive pour les utilisateurs de les jeter dans un menu séparé liste qui demande à l'utilisateur de sauter du touch(écran) de l'interaction d'un bouton d'interaction sur la base simplement parce que la mise en page de l'ActionBar ne peut pas tenir sur la barre.
Sur l'émulateur, je peux mettre le "Matériel/Touches d'Accueil" la valeur "non" et à obtenir cet effet.
J'ai cherché un moyen de le faire dans le code pour un appareil qui a un bouton de menu, mais ne peut pas fine. Quelqu'un peut-il m'aider?
Vous devez vous connecter pour publier un commentaire.
EDIT: Modifié pour répondre à la situation de la physique bouton menu.
C'est effectivement empêché par la conception. Selon le Section compatibilité de Android Guide de Conception,
"...l'action de débordement est disponible dans le menu de la clé matérielle. Les actions qui en découlent, popup... est affiché au bas de l'écran."
Vous pourrez constater sur les captures d'écran, téléphones avec un physique bouton de menu ne disposez pas d'un menu contextuel dans l'ActionBar. Cela évite toute ambiguïté pour l'utilisateur, essentiellement avoir de deux boutons pour ouvrir le menu identique.
Pour aborder la question de la cohérence entre les appareils: en fin de compte, il est plus important de l'expérience de l'utilisateur de votre application se comporter de manière cohérente avec toute autre application sur le même appareil, que de se comporter de manière cohérente avec elle-même sur tous les appareils.
Vous pouvez également utiliser ce petit hack ici:
Bon endroit pour mettre ce serait la
onCreate
-Méthode de votre classe d'Application.Il va forcer l'Application à afficher le menu contextuel. Le bouton de menu fonctionne toujours, mais il va ouvrir le menu dans le coin supérieur droit.
[Modifier] Depuis qu'il est venu plusieurs fois: Ce hack ne fonctionne que pour les natifs de l'ActionBar introduit dans Android 3.0, pas ActionBarSherlock. Ce dernier utilise sa propre logique interne afin de décider si vous souhaitez afficher le menu contextuel. Si vous utilisez ABS, toutes les plates-formes < 4.0 sont gérées par l'ABS et sont donc soumis à sa logique. Le hack aura encore du travail pour tous les appareils avec Android 4.0 ou plus (vous pouvez ignorer en toute sécurité Android 3.x, car il n'y a pas vraiment de comprimés avec un bouton de menu).
Il existe un spécial ForceOverflow-Thème qui va forcer le menu en ABS, mais apperently c'est va être supprimé dans les versions futures en raison des complications.
Field
choisi cettejava.lang.reflect.Field
😉- Je utiliser pour le contourner par la définition de mon menu comme ceci (avec aussi ActionBarSherlock icône utilisé dans mon exemple):
J'avoue que cela peut nécessiter manuel "dépassement de gestion" dans votre fichier xml, mais j'ai trouvé cette solution utile.
Vous pouvez également forcer l'appareil à utiliser HW bouton pour ouvrir le menu contextuel, dans votre activité:
🙂
Si vous utilisez la barre d'action à partir de la bibliothèque de prise en charge (
android.support.v7.app.ActionBar
), utilisez la commande suivante:Ce genre de méthode est empêché par les Développeurs Android de Conception de Système, mais j'ai trouvé un moyen de le passer:
Ajouter ceci à votre fichier menu XML:
Ensuite, créez une classe nommée "AppPickActionProvider", et copiez-y le code suivant:
Bien, je pense qu'Alexandre Lucas a fourni l' (malheureusement) la réponse est correcte, donc je suis en le marquant comme la "corriger" un. L'alternative la réponse, je vais ajouter ici est simplement de pointer de nouveaux lecteurs à ce post dans le blog des Développeurs Android comme une discussion complète de la rubrique avec quelques suggestions précises sur la façon de traiter avec votre code lors du passage de la pré-niveau 11 à la nouvelle Barre d'Action.
Je crois toujours que c'était une conception erreur de ne pas avoir le bouton menu se comporter comme un redondants "Action" Dépassement " bouton dans le menu du bouton des périphériques compatibles comme une meilleure façon de faire la transition de l'expérience utilisateur, mais son eau sous le pont à ce point.
Je ne suis pas sûr si c'est ce que vous cherchez, mais j'ai construit un sous-menu dans l'ActionBar du Menu et définir son icône pour correspondre le Menu contextuel de l'Icône. Bien qu'il n'auront pas automatiquement les éléments envoyés, (c'est à dire que vous avez à choisir ce qui est toujours visible et ce qui est toujours débordé), il me semble que cette approche peut vous aider.
Dans l'application gmail qui vient avec ICS pré-installé, le bouton de menu est désactivée lorsque vous avez plusieurs éléments sélectionnés. Le menu contextuel est ici "forcé" à être déclenchés par l'utilisation de la zone de débordement bouton au lieu de la physique bouton menu. Theres un 3e partie lib appelé ActionBarSherlock qui permet de "forcer" le menu de dépassement. Mais cela ne fonctionnera que sur l'API de niveau 14 ou inférieur(pré-ICS)
Si vous utilisez Barre d'outils, vous pouvez afficher le débordement sur toutes les versions et tous les périphériques, j'ai essayé sur 2.x appareils, il fonctionne.
Désolé si ce problème est mort.
Voici ce que j'ai fait pour résoudre l'erreur. Je suis allé à l'mises en page et création de deux ceux contenant des barres d'outils. L'un était un layout pour le sdk de la version 8, et l'autre pour le sdk de la version 21. Sur la version 8, j'ai utilisé le android.de soutien.v7.widget de.Barre d'outils alors que j'ai utilisé android.widget de.Barre d'outils sur le sdk 21 mise en page.
Puis-je gonfler la barre d'outils dans mon activité. J'ai vérifier le sdk pour voir si elle avait 21 ans ou plus. J'ai ensuite gonfler le correspondant de mise en page. Cela force le bouton matériel de la carte sur la barre d'outils vous réellement conçu.
Pour toute personne utilisant la nouvelle
Toolbar
: