Domanda

Qual è il modo (se c'è un modo) per personalizzare il menu (quella innescata dalla tasto MENU del telefono). Sono particolarmente interessato a due cose:

  • cambiare il colore di sfondo dal grigio chiaro standard in un grigio più scuro
  • come le voci di menu sono allineati. Ho 4 articoli e vengono allineate automaticamente 2x2, ma io preferirei averli tutti in una sola riga (1x4)
È stato utile?

Soluzione

Non con il quadro di menu incorporato.

Siete invitati a intercettare il tasto MENU (via onKeyDown() o qualcosa) e il rendering ciò che si vuole, ma tenere a mente che gli utenti si aspettano a guardare come il resto dei menu fare sul proprio dispositivo.

Altri suggerimenti

Ho creato il mio proprio codice categoria di menu. E forse non è esattamente quello che si vuole, ma si spera, dovrebbe iniziare. Ecco l'articolo che ho pubblicato e un link scaricabile al codice sorgente.

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

È anche possibile implementare il metodo "onCreateOptionsMenu", che di solito è usato per visualizzare il menu standard, e visualizzare quello che vuoi in questo caso.

Nel mio gioco, ho implementato esso per visualizzare una finestra di dialogo "Gioco in pausa" quando si preme il pulsante del menu ...

Usare gli stili. Questo funziona per me su 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>

... allora il drawable è un selettore regolare

<?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>

colore di sfondo del menu in style.xml nel tema

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

Questa risposta opere, ma si è schiantato per me quando si utilizza ActionBarSherlock. Ecco una soluzione hacky per fare questo lavoro modernista.

    // 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();
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top