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
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>
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.
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
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>
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);
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>
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>
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.
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" >
<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>
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..