Comment changer la couleur de fond popup menu android

je génère chaque option de menu à partir de la base de données. 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 comment changer la couleur du menu d'option ou la couleur de fond du menu contextuel (du noir au blanc), est-ce possible ? Merci

20
demandé sur Shashanth 2014-01-20 14:23:49

11 réponses

Ajouter popupMenu style à ur AppTheme:

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

manifeste.xml:

 <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
.............
</application>
34
répondu user543 2014-01-20 10:58:52

si vous utilisez AppCompact-v7 alors vous pouvez le style PopupMenu comme ci-dessous:

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

NOTE: PopMenu fonctionne toujours avec le contexte D'Activité, pas avec le contexte D'Application.

8
répondu Kalpesh 2015-11-20 12:30:01

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ériel. 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, voir le lien http://www.viralandroid.com/2016/01/how-to-change-background-and-text-color-of-android-actionbar-option-menu.html

7
répondu MohanRaj S 2016-09-20 11:27:54

si vous utilisez le thème AppCompat, alors 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
répondu user3024215 2016-03-29 12:51:32

définissez d'abord votre style dans le menu contextuel de styles.fichier xml dans mon cas je l'utilise...

<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 le menu contextuel dans une activité spécifique, donc appliquer le thème (android: Thème= "@style / AppTheme") avec la déclaration d'activité et il est sûr que cela fonctionne. une autre chose importante pour créer le menu popup en utilisant ce code PopupMenu popup = new PopupMenu (votre activité, viewObj);

2
répondu Mohammad tanvirul islam 2014-03-21 06:23:50

dans la mise en page où vous donnez la barre d'outils, spécifiez le thème par app: 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
répondu user2118561 2016-02-19 03:33:34

ajouter le thème PopupMenu à votre thème:

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

manifeste.xml:

<application
    ...
    android:theme="@style/AppTheme">
    ...
</application>
1
répondu M. Doosti Lakhani 2017-08-28 03:27:36

Consultez Comment style PopupMenu? pour plus d'explications. J'étais confronté au même problème, j'ai 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é, en passant L'activité comme le contexte résolu mon problème.

0
répondu Vaibhav Gupta 2017-05-23 11:54:19

Dans Le 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>

For Text Apparence

 <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 App dans Menifest comme:

<application
        android:name="Your Package"
        android:allowBackup="true"
        android:icon="@drawable/launcher_icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
0
répondu Droid_Mechanic 2018-06-18 05:48:44
<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
répondu sathish mobapp dev 2018-10-08 04:55:23

vous pouvez utiliser la disposition personnalisée comme ceci..

PopupMenu pop = new PopupMenu(MainActivity.this, v);
pop.getMenuInflater().inflate(R.menu.main, pop.getMenu());
pop.show();

Conception de mise en page comme vous le souhaitez..espérons que cette aide..

-1
répondu vnshetty 2016-02-19 03:33:02