2009-10-20 8 views
18

De quelle manière (s'il y a un moyen) de personnaliser le menu (celui qui est déclenché par le bouton MENU du téléphone). Je suis particulièrement intéressé par deux choses:Android: personnaliser le menu de l'application (par exemple la couleur de fond)

  • changer la couleur de fond du gris clair standard dans un gris plus foncé
  • comment les éléments du menu sont alignés. J'ai 4 articles et ils sont automatiquement alignés 2x2, mais je préférerais les avoir tous dans une ligne (1x4)
+0

Maintenant, cette question est vieux, mais pour ceux qui cherchent à personnaliser ** débordement barre d'action * * Couleur de fond du menu (par exemple, sur Android 4.0+), voir cette solution: http://stackoverflow.com/a/20077381/56285 – Jonik

Répondre

8

Pas avec le cadre de menu intégré.

Vous êtes invités à intercepter le bouton MENU (via onKeyDown() ou quelque chose) et à rendre ce que vous voulez, mais gardez à l'esprit que les utilisateurs s'attendent à ce que le reste des menus se fasse sur leur appareil.

+1

Merci. Ensuite, je vais sauter sur ceci pour l'instant et peut-être l'implémenter plus tard quand il y aura plus de temps. – znq

+0

J'ai vu des arrangements personnalisés de menus (comme on le voit ici http://androidandme.com/wp-content/uploads/2009/12/05.categories_optionmenu.jpg) donc il doit y avoir un moyen de le faire. – mtmurdock

+0

@mtmurdock: Pas avec le cadre de menu intégré. – CommonsWare

4

Vous pouvez également simplement implémenter la méthode "onCreateOptionsMenu", qui est généralement utilisée pour afficher le menu standard, et afficher ce que vous voulez dans ce cas.

Dans mon jeu, je mis en œuvre pour afficher une boîte de dialogue « Jeu Paused » lorsque le bouton de menu est pressé ...

1
couleur du menu d'arrière-plan dans

style.xml dans votre thème

<item name="android:panelFullBackground">@android:color/darker_gray</item> 
0

This answer œuvres, mais est écrasé pour moi lors de l'utilisation ActionBarSherlock. Voici une solution de contournement hacky pour faire ce travail sans aucun doute.

// Black Vodoo! Do not try this at home. 

    final LayoutInflater li = getLayoutInflater(); 

    final Class<LayoutInflater> clazz = LayoutInflater.class; 

    try { 
     final Field fieldSet = clazz.getDeclaredField("mFactorySet"); 
     fieldSet.setAccessible(true); 
     fieldSet.setBoolean(li, false); 

     li.setFactory(new Factory() { 

      @Override 
      public View onCreateView(final String name, 
        final Context context, final AttributeSet attrs) { 
       if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) { 
        try { 
         final LayoutInflater f = getLayoutInflater(); 
         final View view = f.createView(name, null, attrs); 
         new Handler().post(new Runnable() { 
          @Override 
          public void run() { 
           // Set the text color 
           ((TextView) view).setTextColor(Color.WHITE); 
          } 
         }); 
         return view; 
        } catch (final Exception e) { 
        } 
       } 
       return null; 
      } 
     }); 
    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 
3

Utiliser des styles. Cela fonctionne pour moi sur Android 5,0

<style name="AppTheme" parent="android:Theme.Material.Light"> 
    <item name="android:colorPrimary">@color/primary</item> 
    <item name="android:actionOverflowMenuStyle">@style/PopupMenu.MyStyle</item> 
</style> 

<style name="PopupMenu.MyStyle" parent="android:Widget.PopupMenu"> 
    <item name="android:popupBackground">@drawable/actionbar_item_background</item> 
</style> 

... alors le drawable est un sélecteur régulier

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/primary"/> 
    <item android:drawable="@color/highlighted" android:state_pressed="true"/> 
</selector> 
Questions connexes