android colors popupmenu

Color del texto del menú emergente de Android(AppCompat)



colors popupmenu (5)

En styles.xml

<style name="itemTextStyle.AppTheme" parent="@android:style/TextAppearance.Widget.IconMenu.Item"> <item name="android:textColor">@drawable/color_item_popup</item> <item name="android:textSize">@dimen/text_content</item> </style>

y añadir en AppTheme

<item name="android:itemTextAppearance">@style/itemTextStyle.AppTheme</item>

color_item_popup.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="@color/primary_text"/> <item android:state_focused="true" android:color="@color/primary_text"/> <item android:color="@color/secondary_text"/> </selector>

Necesito cambiar el color del texto de un menú emergente, pero no encuentro la forma de hacerlo. Puedo cambiar el fondo del menú emergente pero no el texto. Edito el style.xml de esta manera:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <!-- API 14 theme customizations can go here. --> <item name="popupMenuStyle">@style/MyPopupMenu</item> <item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item> <item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item> </style> <style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu"> <item name="android:popupBackground">#0F213F</item> </style> <style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Base.Widget.PopupMenu.Small"> <item name="android:textColor">#ffffff</item> </style> <style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Base.Widget.PopupMenu.Large"> <item name="android:textColor">#ffffff</item> </style>

donde esta el error


En styles.xml:

<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu.Overflow"> <item name="android:popupBackground">@color/white</item> </style>

En java:

Context wrapper = new ContextThemeWrapper(getContext(), R.style.PopupMenu); final PopupMenu popupMenu = new PopupMenu(wrapper, view);


Obviamente puedes personalizar el PopupMenu a tu manera. Es bastante simple. Pero primero necesitas cuidar de una cosa muy importante.

El PopupMenu se crea así,

PopupMenu popupMenu = new PopupMenu(context, anchorView);

Ahora el "contexto" aquí juega un papel muy importante en el estilo. El estilo del PopupMenu depende del estilo del contexto que se pasa. Así que ten mucho cuidado en esto. Perdí casi media hora de averiguar esto.

Si está en un fragmento, simplemente pase "getActivity ()" y ya está.

Estilo de los elementos PopupMenu

Simplemente anula los siguientes elementos en tu estilo,

<item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item> <item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item> <item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item> <item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>

Y personaliza la apariencia del texto como quieras,

<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small"> <item name="android:textColor">@color/text_hint_color</item> </style> <style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large"> <item name="android:textColor">@color/text_hint_color</item> </style>

Si desea cambiar el fondo del PopupMenu, haga esto

<item name="popupMenuStyle">@style/myPopupMenuStyle</item> <item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>

Estilo avanzado

Los elementos de PopupMenu no admiten mostrar los iconos de forma predeterminada. Pero mostrar los iconos puede hacer que se vea mucho mejor. Recomiendo probarlo.

Para implementar esto, simplemente ponga el siguiente código en su actividad y estará listo para comenzar,

@Override public boolean onMenuOpened(int featureId, Menu menu) { if (featureId == Window.FEATURE_ACTION_BAR && menu != null) { if (menu.getClass().getSimpleName().equals("MenuBuilder")) { try { Method m = menu.getClass().getDeclaredMethod( "setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch (NoSuchMethodException e) { Log.e("tag", "onMenuOpened", e); } catch (Exception e) { throw new RuntimeException(e); } } } return super.onMenuOpened(featureId, menu); }

Espero eso ayude.


//In Main Style <item name="popupMenuStyle">@style/popupMenuStyle</item> <item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item> <item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item> //In Define part <style name="popupMenuStyle" parent="Widget.AppCompat.PopupMenu"> <item name="android:popupBackground">@drawable/popup_bg</item> <item name="android:textColor">#ffffff</item> </style> <style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small"> <item name="android:textColor">#ffffff</item> </style> <style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large"> <item name="android:textColor">#ffffff</item> </style> //you may use this background //popup_bg.xml <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="135" android:centerColor="#c8232323" android:endColor="#c80d0d0d" android:startColor="#c8434242" android:type="linear" /> </shape>


<item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item> <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item>

Creo que está utilizando TextAppearance.AppCompat.Base.Widget.PopupMenu. Aquí está el error, está utilizando otro padre que no responde al estilo actual.

Tienes que usar:

TextAppearance.AppCompat.Light.Widget.PopupMenu.