Question

Quelle est la façon (s'il y a un moyen) de personnaliser le menu (celui déclenché par le bouton MENU du téléphone). Je suis particulièrement intéressé par deux choses:

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

La solution

Non avec le cadre de menu intégré.

Nous vous invitons à intercepter le bouton MENU (via onKeyDown() ou quelque chose) et de rendre ce que vous voulez, mais gardez à l'esprit que les utilisateurs vont s'attendre à regarder comme le reste des menus faites sur leur appareil.

Autres conseils

J'ai créé ma propre classe de menu. Il est peut-être pas exactement ce que vous voulez, mais il devrait, espérons vous aider à démarrer. Voici l'article que je publiais et un lien de téléchargement du code source.

http://www.codeproject.com/KB/android/AndroidMenusMyWay.aspx

Vous pouvez également implémenter simplement la méthode « onCreateOptionsMenu », qui est habituellement utilisé 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é ...

Utilisez les 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>

couleur du menu d'arrière-plan style.xml dans votre thème

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

Cette réponse fonctionne, mais est écrasé pour moi lors de l'utilisation ActionBarSherlock. Voici une solution de contournement hacky pour faire ce travail nontheless.

    // 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();
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top