Comment forcer l'icône de débordement de la barre d'action à afficher

Je voudrais forcer l'icône de débordement à toujours s'afficher dans la barre d'action (en supposant qu'il y ait des éléments de débordement). Sur les modèles avec un bouton de menu, parfois l'icône de débordement n'apparaît pas et les utilisateurs doivent appuyer sur le bouton de menu périphériques pour obtenir le reste des éléments de menu d'action. Les utilisateurs continuent à se plaindre à ce sujet.

Notez que pour le menu contextuel, l'icône de débordement s'affiche toujours, que l'appareil dispose ou non d'un bouton de menu intégré.

Je me rends compte que forcer la l'icône de débordement à apparaître dans la barre d'action dupliquerait la fonctionnalité de la "physique". Vous pourriez considérer que la violation des directives de conception androïdes. À mon avis, cependant, les utilisateurs gagner. Ils disent que c'est confus et je crois qu'ils ont raison.

23
demandé sur Peri Hartman 2013-12-07 21:55:30

2 réponses

Félicitations! Vous avez gagné!

À partir D'Android 4.4, la ... affordance dans la barre d'action sera là, peu importe si l'appareil a un bouton de MENU physique ou non. Le Document de définition de compatibilité actuel de Google est maintenant un peu plus fort contre le fait d'avoir un bouton de MENU dédié.

Le hack que les développeurs ont utilisé dans le passé, pour obtenir ce comportement, est:

try {
  ViewConfiguration config = ViewConfiguration.get(this);
  Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");

  if (menuKeyField != null) {
    menuKeyField.setAccessible(true);
    menuKeyField.setBoolean(config, false);
  }
}
catch (Exception e) {
  // presumably, not relevant
}

Cela ne devrait pas être nécessaire sur Android 4.4+, mais à l'exception gestionnaire en place, Je ne m'attendrais pas à un problème particulier si vous l'exécutez et, un jour, ils se débarrassent de sHasPermanentMenuKey carrément.

Personnellement, je ne changerais toujours pas les choses sur Android 4.3 et ci-dessous, car je soupçonne que c'est une situation de whack-a-mole, où vous remplacerez les plaintes concernant l'absence de menu par des plaintes concernant les versions en double du même menu. Cela étant dit, Puisque c'est maintenant le comportement officiellement approuvé à l'avenir, je n'ai aucun problème avec les développeurs visant cohérence sur les appareils plus anciens.

Un conseil chapeau à le commentateur sur la question que j'ai déposée à ce sujet, soulignant le changement.

58
répondu CommonsWare 2013-12-07 19:27:52

Cela pourrait être un autre travail autour, ce qui m'a vraiment aidé. Gardez un drawable avec trois points et donnez - le comme un élément de menu.

<?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:app="http://schemas.android.com/apk/res-auto">


<item
    android:id="@+id/saveDetails"
    app:showAsAction="always"
    android:title="@string/save"/>

<item
    android:id="@+id/menu_overflow"
    android:icon="@drawable/dts"
    android:orderInCategory="11111"
    app:showAsAction="always">
    <menu>
        <item
            android:id="@+id/contacts"
            app:showAsAction="never"
            android:title="Contacts"/>


        <item
            android:id="@+id/service_Tasks"
            app:showAsAction="never"
            android:title="Service Tasks"/>


        <item
            android:id="@+id/charge_summary"
            app:showAsAction="never"
            android:title="Charge Summary"/>


        <item
            android:id="@+id/capture_signature"
            app:showAsAction="never"
            android:title="Capture Signature"/>
    </menu>
</item>

</menu>
25
répondu Rino 2018-06-20 10:08:39