Je voudrais avoir tous les éléments de menu qui ne rentrent pas dans le go ActionBar dans le menu de trop - plein (celui qui est atteint de la barre d' action non sur le bouton de menu) , même sur des appareils qui faire un bouton Menu . Cela semble beaucoup plus intuitif pour les utilisateurs que de les jeter dans une liste de menus séparée qui oblige l'utilisateur à passer d'une interaction tactile (écran) à une interaction basée sur un bouton simplement parce que la disposition de l'ActionBar ne peut pas les adapter à la barre.
Sur l'émulateur, je peux définir la valeur "Hardware Back / Home Keys" sur "no" et obtenir cet effet. J'ai cherché un moyen de le faire dans le code pour un appareil réel qui a un bouton de menu mais ne peut pas en régler un. Quelqu'un peut-il m'aider?
Vous pouvez également utiliser ce petit hack ici:
Le bon endroit pour le mettre serait la
onCreate
-Méthode de votre classe Application.Cela forcera l'application à afficher le menu de débordement. Le bouton de menu fonctionnera toujours, mais il ouvrira le menu dans le coin supérieur droit.
[Modifier] Depuis qu'il est venu plusieurs fois maintenant: Ce hack ne fonctionne que pour l'ActionBar native introduite dans Android 3.0, pas ActionBarSherlock. Ce dernier utilise sa propre logique interne pour décider d'afficher ou non le menu de débordement. Si vous utilisez l'ABS, toutes les plateformes <4.0 sont gérées par l'ABS et sont donc soumises à sa logique. Le hack fonctionnera toujours pour tous les appareils équipés d'Android 4.0 ou supérieur (vous pouvez ignorer en toute sécurité Android 3.x, car il n'y a pas vraiment de tablettes avec un bouton de menu).
Il existe un thème spécial ForceOverflow qui forcera le menu en ABS, mais apparemment, il sera supprimé dans les versions futures en raison de complications .
la source
Field
choisissez celle-cijava.lang.reflect.Field
;)J'utilise pour contourner le problème en définissant mon menu comme celui-ci (également avec l'icône ActionBarSherlock utilisée dans mon exemple):
J'admets que cela peut nécessiter une "gestion de débordement" manuelle dans votre xml, mais j'ai trouvé cette solution utile.
Vous pouvez également forcer l'appareil à utiliser le bouton HW pour ouvrir le menu de débordement, dans votre activité:
:-)
la source
Si vous utilisez la barre d'action de la bibliothèque de support (
android.support.v7.app.ActionBar
), utilisez ce qui suit:la source
Ce type de méthode est empêché par le système de conception Android Developers, mais j'ai trouvé un moyen de le faire passer:
Ajoutez ceci à votre fichier de menu XML:
Ensuite, créez une classe nommée 'AppPickActionProvider' et copiez-y le code suivant:
la source
Eh bien, je pense qu'Alexander Lucas a fourni la réponse (malheureusement) correcte, donc je la marque comme "correcte". La réponse alternative que j'ajoute ici est simplement de diriger tous les nouveaux lecteurs vers cet article du blog Android Developers en tant que discussion plutôt complète du sujet avec quelques suggestions spécifiques sur la façon de gérer votre code lors de la transition du pré-niveau 11 à la nouvelle barre d'action.
Je crois toujours que c'était une erreur de conception que le bouton de menu ne se comporte pas comme un bouton "Action Overflow" redondant dans les appareils activés par le bouton de menu comme un meilleur moyen de faire la transition de l'expérience utilisateur, mais son eau sous le pont à ce stade.
la source
Je ne sais pas si c'est ce que vous recherchez, mais j'ai créé un sous-menu dans le menu de la barre d'action et défini son icône pour correspondre à l'icône du menu de débordement. Bien que les éléments ne lui soient pas automatiquement envoyés (c'est-à-dire que vous devez choisir ce qui est toujours visible et ce qui déborde toujours), il me semble que cette approche peut vous aider.
la source
Dans l'application Gmail fournie avec ICS préinstallé, le bouton de menu est désactivé lorsque plusieurs éléments sont sélectionnés. Le menu de débordement est ici "forcé" d'être déclenché par l'utilisation du bouton de débordement au lieu du bouton de menu physique. Theres une bibliothèque tierce appelée ActionBarSherlock qui vous permet de "forcer" le menu de débordement. Mais cela ne fonctionnera qu'au niveau d'API 14 ou inférieur (pré-ICS)
la source
Si vous utilisez la barre d'outils , vous pouvez afficher le débordement sur toutes les versions et tous les appareils, j'ai essayé sur certains appareils 2.x, cela fonctionne.
la source
Désolé si ce problème est mort.
Voici ce que j'ai fait pour résoudre l'erreur. Je suis allé aux mises en page et en ai créé deux contenant des barres d'outils. L'un était une mise en page pour la version 8 de sdk et l'autre pour la version 21 de sdk. Sur la version 8, j'ai utilisé la barre d'outils android.support.v7.widget.Toolbar tandis que j'ai utilisé android.widget.Toolbar sur la mise en page sdk 21.
Ensuite, je gonfle la barre d'outils dans mon activité. Je vérifie le sdk pour voir s'il était de 21 ou plus. Je gonfle ensuite la mise en page correspondante. Cela force le bouton matériel à mapper sur la barre d'outils que vous avez réellement conçue.
la source
Pour tous ceux qui utilisent le nouveau
Toolbar
:la source