Je dois changer la couleur du texte d'un menu popuo mais je ne trouve aucun moyen de le faire, je peux changer l'arrière-plan du menu pop mais pas le texte, je modifie le style.xml de cette façon:
<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>
où est l'erreur?
<item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item>
<item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item>
Je pense que vous utilisez TextAppearance.AppCompat.Base.Widget.PopupMenu. Voici l'erreur, vous utilisez un autre parent qui ne répond pas au style actuel.
Vous devez utiliser:
TextAppearance.AppCompat.Light.Widget.PopupMenu.
Dans 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>
et ajouter dans 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>
Dans 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);
Vous pouvez évidemment personnaliser le PopupMenu à votre manière. C'est assez simple. Mais vous devez d'abord prendre soin d'une chose très importante.
Le PopupMenu est créé comme ceci,
PopupMenu popupMenu = new PopupMenu(context, anchorView);
Maintenant, le "contexte" joue ici un rôle très important dans le style. Le style du PopupMenu dépend du style du contexte que vous passez. Soyez donc très prudent à ce sujet. J'ai perdu presque une demi-heure à comprendre cela.
Si vous êtes dans un fragment, passez simplement "getActivity ()" et vous avez terminé.
Style des éléments PopupMen
Remplacez simplement les éléments suivants dans votre style,
<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>
Et personnalisez l'apparence du texte comme vous le souhaitez,
<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 vous souhaitez modifier l'arrière-plan du menu contextuel, procédez comme suit
<item name="popupMenuStyle">@style/myPopupMenuStyle</item>
<item name="Android:popupMenuStyle">@style/myPopupMenuStyle</item>
style avancé
Les éléments PopupMenu ne prennent pas en charge l'affichage des icônes par défaut. Mais afficher les icônes peut le rendre beaucoup mieux. Je recommande de l'essayer.
Pour implémenter cela, mettez simplement le code suivant dans votre activité et vous êtes prêt à partir,
@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);
}
J'espère que cela aide.
//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>