studio programacion para intuitivas for español dummies desarrollo con avanzado aplicaciones android customization android-menu

programacion - Android: personalizar el menú de la aplicación(por ejemplo, color de fondo)



manual desarrollo de aplicaciones android pdf (6)

¿Cuál es la forma (si existe) de personalizar el menú (el que se activa con el botón MENÚ del teléfono)? Estoy especialmente interesado en dos cosas:

  • cambiando el color de fondo del gris claro estándar a un gris más oscuro
  • cómo se alinean los elementos del menú Tengo 4 elementos y se alinean automáticamente 2x2, pero preferiría tenerlos todos en una línea (1x4)


No con el marco de menú incorporado.

Puede interceptar el botón MENÚ (a través de onKeyDown() o algo) y renderizar lo que desea, pero tenga en cuenta que los usuarios esperan que se vea como el resto de los menús en su dispositivo.


También puede implementar el método "onCreateOptionsMenu", que generalmente se usa para mostrar el menú estándar, y mostrar lo que quiera en este caso.

En mi juego, lo implementé para mostrar un cuadro de diálogo "Juego en pausa" cuando se presiona el botón de menú ...


Usa estilos. Esto me funciona 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 el dibujable es un selector regular

<?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 menú de fondo en style.xml en tu tema

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


Esta respuesta funciona, pero se bloqueó para mí cuando uso ActionBarSherlock. Aquí hay una solución hacky para hacer este trabajo sin embargo.

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