Je prépare mon application pour Android 5.0, j'utilise la dernière bibliothèque de compatibilité, voici à quoi ressemble mon style.
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/theme_accent</item>
<item name="colorAccent">@color/theme_accent_secondary</item>
</style>
<style name="AppThemeDark" parent="Theme.AppCompat">
<item name="colorPrimary">@color/theme_accent</item>
<item name="colorAccent">@color/theme_accent_secondary</item>
</style>
</resources>
(La couleur ActionBar est définie par programme.)
Maintenant, je veux que le menu débordement/popup ait le fond sombre comme dans l'implémentation holo, mais je ne peux pas le faire fonctionner, voici à quoi ça ressemble:
J'ai essayé de régler la popupMenuStyle
mais cela n'a pas fonctionné.
Comment puis-je assombrir le menu contextuel?
Résolu mon problème en utilisant ce style:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/theme_accent</item>
<item name="colorAccent">@color/theme_accent_secondary</item>
<item name="actionBarStyle">@style/AbStyle</item>
<item name="actionModeBackground">@color/actionmode_bg</item>
</style>
<style name="AbStyle" parent="Widget.AppCompat.Toolbar">
<item name="elevation">2dp</item>
<item name="displayOptions">homeAsUp|showTitle</item>
<!--showHome-->
</style>
<style name="AppThemeDark" parent="Theme.AppCompat">
<item name="colorAccent">@color/theme_accent_secondary</item>
<item name="actionBarStyle">@style/AbStyle</item>
</style>
Je devais utiliser Widget.AppCompat.Toolbar comme actionBarStyle parent
Arrêtez d'utiliser ActionBar
. Si vous voulez qu'une ToolBar
soit configurée comme une ActionBar
, suivez ce guide sur le blog des développeurs Android.
Il mentionne en fait votre cas d'utilisation sur la barre Dark Action Bar et fournit le code suivant:
<Android.support.v7.widget.Toolbar
Android:layout_height=”wrap_content”
Android:layout_width=”match_parent”
Android:minHeight=”@dimen/triple_height_toolbar”
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Pas une réponse complète mais ce que j'ai trouvé jusqu'à présent:
Dans les versions précédentes, vous deviez spécifier un dessin (Vérifiez https://github.com/StylingAndroid/StylingActionBar code et tutoriels).
Apparemment, maintenant c'est une couleur. Pour le modifier, vous devez spécifier le thème suivant:
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="AppTheme" parent="Android:Theme.Material.Light.DarkActionBar">
<item name="Android:actionBarPopupTheme">@style/popupNew</item>
</style>
<style name="popupNew" parent="Android:ThemeOverlay.Material.Light">
<item name="Android:colorBackground">@color/red</item>
</style>
</resources>
Cela fonctionne correctement si le thème appliqué à l'application est simplement ceci . Si j'ajoute Android:actionBarPopupTheme
à mon thème existant, cela ne fonctionne pas. J'essaie de comprendre pourquoi.
Ajoutez la propriété popupTheme à votre barre d’outils:
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/color_primary"
app:theme="@style/Theme.AppCompat.Light"
app:popupTheme="@style/Theme.AppCompat" />
Ou définissez un nouveau style pour votre barre d’outils:
<style name="MyToolBarStyle" parent="Widget.AppCompat.Toolbar">
<item name="Android:background">@color/green</item>
<item name="popupTheme">@style/Theme.AppCompat.Light</item>
<item name="theme">@style/Theme.AppCompat</item>
</style>
Nous avons déjà répondu à cette question concernant le style via XML, mais j’ajoute ici une explication sur la façon de résoudre vous-même la solution à ce problème.
Tout d'abord, c'est la solution lorsque vous utilisez AppCompat. Dans le fichier style.xml de votre application, ajoutez actionBarPopupTheme à votre thème:
<style name="Theme.MyTheme" parent="@style/Base.Theme.AppCompat.Light.DarkActionBar">
...other stuff here
<item name="actionBarPopupTheme">@style/Theme.MyTheme.ActionBarPopupTheme</item>
</style>
<style name="Theme.MyTheme.ActionBarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Light">
<item name="Android:textColor">@Android:color/white</item>
<item name="Android:background">@Android:color/black</item>
</style>
Voici les étapes que j'ai suivies pour arriver à cette solution (cela demande un peu de travail de détective car la documentation d'Android est médiocre):
Dans ce style, j'ai vu cette ligne:
<item name = "actionBarPopupTheme"> @ style/ThemeOverlay.AppCompat.Light </ item>
Cela ressemblait à un endroit possible pour changer le thème du popup. J'ai cherché "actionBarPopupTheme" chez les pauvres La documentation destinée aux développeurs Android a été trouvée "Référence à un thème devant être utilisé pour Gonfler les popups affichés par les widgets dans la barre d’action". Donc, cela valait la peine de jouer avec.
J'ai copié la ligne appcompat contenant "actionBarPopupTheme" dans mon style.xml puis, dans cette ligne, j'ai remplacé la référence de thème de l'élément (le bit en gras ci-dessus) par Theme.MyTheme.ActionBarPopupTheme.