Je génère chaque option du menu à partir de la base de données d'interrogation . Voici mon code.
final PopupMenu popupMenu = new PopupMenu(getBaseContext(), v);
SQLiteDatabase db = AdapterDb.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, null);
int ctritem = 0;
if (cursor.moveToFirst()) {
popupMenu.getMenu().add(Menu.NONE, ctritem, Menu.NONE, "ALL ITEMS");
do {
ctritem++;
popupMenu.getMenu().add(Menu.NONE, ctritem, Menu.NONE, cursor.getString(0));
} while (cursor.moveToNext());
}
Tout va bien, mais le problème est de savoir comment changer la couleur du menu des options ou la couleur de fond du menu contextuel (du noir au blanc), est-ce possible? Merci.
Ajouter un style popupMenu à votre application:
<style name="AppTheme" parent="Android:Theme.Light">
<item name="Android:popupMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="@Android:style/Widget.PopupMenu">
<item name="Android:popupBackground">@Android:color/white</item>
</style>
manifest.xml:
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
.............
</application>
S'il vous plaît ajouter les lignes suivantes dans le fichier XML de style, j'espère que cela aidera pour l'application de conception de matériau .Style.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<!-- To change the popup menu and app text color -->
<item name="Android:textColor">@color/colorPrimary</item>
<!-- To change the background of options menu-->
<item name="Android:itemBackground">@color/skyBlue</item>
</style>
Pour plus de détails, consultez ce lien http://www.viralandroid.com/2016/01/how-to-change-background-and-text-color-of-Android-actionbar-option-menu.html
Si vous utilisez AppCompact-v7, vous pouvez styler PopupMenu comme suit:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="popupMenuStyle">@style/popupMenuStyle</item>
</style>
<style name="popupMenuStyle" parent="Widget.AppCompat.PopupMenu">
<item name="Android:popupBackground">@Android:color/white</item>
</style>
REMARQUE: PopMenu fonctionne toujours avec le contexte d'activité, pas avec le contexte d'application.
si vous utilisez le thème AppCompat, utilisez
<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu">
<item name="Android:popupBackground">@Android:color/black</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="popupMenuStyle">@style/PopupMenu</item>
</style>
autrement
<style name="AppTheme" parent="Android:Theme.Light">
<item name="Android:popupMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="@Android:style/Widget.PopupMenu">
<item name="Android:popupBackground">@Android:color/white</item>
</style>
d’abord, définissez votre style pour l’arrière-plan du menu contextuel dans le fichier styles.xmlin mon cas, j’utilise cette ...
<style name="AppTheme" parent="Android:Theme.Holo.Light.DarkActionBar">
<item name="Android:popupMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="@Android:style/Widget.PopupMenu">
<item name="Android:popupBackground">@Android:color/holo_green_light</item>
</style>
ici, je veux changer l'arrière-plan du menu contextuel dans une activité spécifique, alors appliquez le thème (Android: theme = "@ style/AppTheme") avec la déclaration d'activité et ça fonctionne sûrement ... une autre chose importante pour créer un menu contextuel en utilisant ce code PopupMenu popup = new PopupMenu (votre activité, viewObj);
Dans la présentation où vous donnez la barre d’outils, spécifiez le thème par application: popupTheme = "@ style/MyPopupMenu"
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:minHeight="?attr/actionBarSize"
Android:background="#2196F3"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
style="@style/DrawerArrowStyle"
app:popupTheme="@style/MyPopupMenu">
</Android.support.v7.widget.Toolbar>
<style name="AppTheme1" parent= "Android:Theme.DeviceDefault">
<item name="Android:actionBarPopupTheme">@style/popupNew</item>
</style>
<style name="popupNew" parent="Android:ThemeOverlay.Material.Light">
<item name="Android:colorBackground">#ffffff</item>
</style>
Ajoutez ceci à votre fichier style.xml
<style name="PopupMenu" parent="Theme.AppCompat.Light">
<item name="Android:popupBackground">@Android:color/white</item>
</style>
Définir le style sur Spinner
<Spinner
Android:theme="@style/PopupMenu"
Android:popupMenuStyle="@style/PopupMenu"/>
Cela fonctionnerait également pour les périphériques de niveau API 16+.
In Style Votre thème d'application
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your theme here. -->
<item name="Android:itemBackground">@color/list_background</item>
<item name="Android:itemTextAppearance">@style/MyActionBar.MenuTextStyle</item>
</style>
Pour l'apparence du texte
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="background">@color/list_item_title</item>
<item name="titleTextStyle">@style/MyActionBarTitle</item>
</style>
<style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="Android:textColor">@color/list_item_title</item>
</style>
<style name="MyActionBar.MenuTextStyle"
parent="style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="Android:textColor">@color/list_item_title</item>
<item name="Android:textStyle">normal</item>
<item name="Android:textSize">16sp</item>
<item name="Android:gravity">center</item>
</style>
Et utiliser le thème de l'application dans Manifest comme:
<application
Android:name="Your Package"
Android:allowBackup="true"
Android:icon="@drawable/launcher_icon"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
Ajoutez un thème PopupMenu à votre AppTheme:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="popupTheme">@style/PopupMenuTheme</item>
</style>
<style name="PopupMenuTheme" parent="Theme.AppCompat.Light">
<item name="Android:background">@Android:color/white</item>
</style>
manifest.xml:
<application
...
Android:theme="@style/AppTheme">
...
</application>
Veuillez vous référer Comment styler PopupMenu? pour plus d'explications. Je faisais face au même problème, cherché beaucoup mais j'ai trouvé la solution dans le lien mentionné.
PopupMenu est créé de la manière suivante:
PopupMenu popup = new PopupMenu(context, view);
PopupMenu prend le style du contexte qui est passé, Activité passante comme le contexte a résolu mon problème.