studio para menus ejemplos desplegable contextual context bar android drop-down-menu menu android-actionbar

para - ¿Cómo aplicar estilo al menú de desbordamiento de texto en acción en el dispositivo con Android> 4.0 y el botón de hardware?



popup menu android (6)

He estado cavando en la temática AppCompat, pero lo que sea que probé, el TextColor permanece en blanco. Lo que hago ahora es simplemente abrir el menú de la barra de herramientas manualmente de esta manera:

@Override public boolean onKeyUp(int keycode, KeyEvent e) { switch (keycode) { case KeyEvent.KEYCODE_MENU: if ( getSupportActionBar() != null ) { getSupportActionBar().openOptionsMenu(); return true; } } return super.onKeyUp(keycode, e); }

Al presionar el botón de menú mientras el menú está abierto, se cierra mágicamente.

¿Quién necesita el feo fondo negro alineado de todos modos?

Me gustaría personalizar el fondo y el color del texto para mi menú de desbordamiento. Funciona bien con dispositivos sin botón de menú de hardware, pero no puedo diseñar dispositivos con botón de menú de hardware. Ver las capturas de pantalla:

Estoy usando estos estilos:

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar"> <item name="android:popupMenuStyle">@style/settleup_PopupMenu</item> <item name="android:actionMenuTextColor">@android:color/white</item> </style> <style name="settleup_PopupMenu" parent="@style/Widget.Sherlock.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_dropdown_panel_settleup</item> </style>


He investigado el problema. Y parece que no hay manera de cambiar textColor para el menú de opciones para dispositivos Android = = 4.0 con la tecla de menú HW. Ni siquiera cambiar los colores primarios, secundarios o terciarios afectó el color del texto.
La única "solución" que me viene a la mente ahora es un uso bastante desagradable de la API de reflexión Java.

Sin embargo, puede configurar el fondo del menú de opciones inferior de los dispositivos con clave Android> = 4.0 HW por separado del fondo del menú desplegable de teclas que no son de HW.

Ya tiene el estilo para el menú desplegable de teclas que no son de HW. El menú desplegable de claves no HW está definido por android:popupMenuStyle (y popupMenuStyle ):

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar"> <item name="android:popupMenuStyle">@style/settleup_PopupMenu</item> </style>

Pero el fondo del menú de opciones inferior de Android> = 4.0 HW se define con el elemento android:panelBackground en el tema:

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar"> <item name="android:panelBackground">@drawable/mybackground</item> </style>

Dado que parece ser un problema cambiar el color del texto para el menú de opciones inferior en los dispositivos clave con Android> = 4.0 HW, sugeriría dejar esta parte a su estilo predeterminado.


Intenta también agregar los elementos sin el prefijo de Android

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar"> <item name="android:popupMenuStyle">@style/settleup_PopupMenu</item> <item name="popupMenuStyle">@style/settleup_PopupMenu</item> <item name="android:actionMenuTextColor">@android:color/white</item> <item name="actionMenuTextColor">@android:color/white</item> </style> <style name="settleup_PopupMenu" parent="@style/Widget.Sherlock.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_dropdown_panel_settleup</item> <item name="popupBackground">@drawable/menu_dropdown_panel_settleup</item> </style>


Lo que puede hacer si realmente tiene que cambiar el color de texto del menú de la imagen correcta podría ser el siguiente "hack":

SpannableStringBuilder text = new SpannableStringBuilder(); text.append("MenuItem1"); text.setSpan(new ForegroundColorSpan(Color.WHITE), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); menu.add(Menu.NONE, MENU_ITEM_1, Menu.NONE, null).setTitle(text);

Estoy de acuerdo en que no es la forma más limpia (diría que es bastante feo porque debe prestar atención en cada actividad en la que tenga un menú de este tipo y el título de cada elemento del menú debe cambiarse utilizando esta lógica), pero es algo que muestra la Resultado Esperado. Déjame saber si te ayudó.

¡Aclamaciones!


Para el tema de AppCompat :

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="actionBarPopupTheme">@style/HardwareOptionMenu</item> </style> <style name="HardwareOptionMenu" parent="ThemeOverlay.AppCompat.Dark"> <item name="android:textColorSecondary">@color/white</item> <item name="android:colorBackground">@color/black</item> </style>


Puede aplicar estilos y temas en el menú de desbordamiento como se muestra a continuación. El menú OverFlow es ListView, por lo tanto, podemos aplicar el tema según la vista de lista.

Aplica el siguiente código en styles.xml

<style name="AppTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item> <item name="android:actionBarWidgetTheme">@style/PopupMenuTextView</item> <item name="android:popupMenuStyle">@style/PopupMenu</item> <item name="android:listPreferredItemHeightSmall">40dp</item> </style> <!-- Change Overflow Menu ListView Divider Property --> <style name="PopupMenuListView" parent="@android:style/Widget.Holo.ListView.DropDown"> <item name="android:divider">@color/app_navigation_divider</item> <item name="android:dividerHeight">1sp</item> <item name="android:listSelector">@drawable/list_selector</item> </style> <!-- Change Overflow Menu ListView Text Size and Text Size --> <style name="PopupMenuTextView" parent="@android:style/Widget.Holo.Light.TextView"> <item name="android:textColor">@color/app_white</item> <item name="android:textStyle">normal</item> <item name="android:textSize">18sp</item> <item name="android:drawablePadding">25dp</item> <item name="android:drawableRight">@drawable/navigation_arrow_selector</item> </style> <!-- Change Overflow Menu Background --> <style name="PopupMenu" parent="android:Widget.Holo.Light.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_overflow_bg</item> </style>