web-dev-qa-db-fra.com

Comment changer la couleur de fond menu contextuel android

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.

22
user3172337

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>
35
user543

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

8
MohanRaj S

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. 

8
Kalpesh

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>
4
user3024215

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>
2
user2118561
<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>
0
sathish mobapp dev

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+.

0
pratham kesarkar

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" >
0
Droid_Mechanic

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>
0
M. Doosti Lakhani

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.

0
Vaibhav Gupta