web-dev-qa-db-fra.com

Android: Personnaliser le menu de l'application (couleur de fond E.g)

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

  • changer la couleur d'arrière-plan du gris clair standard en gris plus foncé
  • comment les éléments de 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)
19
znq

Pas avec le cadre de menu intégré.

Vous êtes invitée à intercepter le bouton Menu (via onKeyDown() ou quelque chose) et rendu ce que vous voulez, mais gardez à l'esprit que les utilisateurs s'attendront à ce que cela ressemble au reste des menus sur leur appareil.

8
CommonsWare

J'ai créé ma propre classe de menus. Ce n'est peut-être pas exactement ce que vous voulez, mais j'espère que vous commencez à démarrer. Voici l'article que j'ai publié et un lien téléchargeable vers le code source.

http://www.codeproject.com/kb/andrroid/androidmenusmyway.aspx

13
authorwjf

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 l'ai mis en place pour afficher une boîte de dialogue "pause de jeu" lorsque vous appuyez sur la touche MENU ...

4
alocaly

Utilisez 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 sélecteur digue 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>
3
Marco Bonechi

couleur du menu de fond dans style.xml dans votre thème

<item name="Android:panelFullBackground">@Android:color/darker_gray</item>
1
wdog

Cette réponse fonctionne mais s'est écrasée pour moi lors de l'utilisation d'ActionbarcherLock. Voici une solution de contournement hacky pour rendre ce travail néanmoins.

    // 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();
    }
0
Kirill Rakhman