Android: menú de la aplicación modifique para requisitos particulares (por ejemplo color de fondo)

StackOverflow https://stackoverflow.com/questions/1593529

Pregunta

¿Cuál es la forma (si hay una manera) para personalizar el menú (el que está provocada por el botón de menú del teléfono). Estoy especialmente interesado en dos cosas:

  • cambiar el color de fondo del gris claro estándar en un gris más oscuro
  • cómo están alineados los elementos del menú. Tengo 4 elementos y que se alinean automáticamente 2x2, pero yo preferiría tener a todos ellos en una sola línea (1x4)
¿Fue útil?

Solución

No con la incorporada en el marco del menú.

Usted es bienvenido para interceptar el botón MENU (a través de onKeyDown() o algo así) y hacer que lo que quiere, pero hay que tener en cuenta que los usuarios a estar esperando que se vea como el resto de los menús de hacerlo en su dispositivo.

Otros consejos

He creado mi propia clase menú. Es tal vez no es exactamente lo que quiere, pero es de esperar que debería empezar. Aquí está el artículo que publiqué y un enlace para descargar el código fuente.

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

También puede simplemente poner en práctica el método "onCreateOptionsMenu", que por lo general se utiliza para mostrar el menú estándar, y la pantalla lo que quiera en este caso.

En mi juego, me puso en práctica para mostrar un cuadro de diálogo "Juego En pausa" cuando el botón de menú se presiona ...

Use estilos. Esto funciona para mí en 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>

... entonces la estirable es un selector regulares

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

Color del fondo del menú en style.xml en su tema

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

obras de esta respuesta pero estrellado para mí cuando se utiliza ActionBarSherlock. Aquí hay una solución hacky para hacer de este nontheless trabajo.

    // 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();
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top