8
votes

CAB Overflow Menu Style personnalisé

Dans ma candidature, je montre une barre d'action contextuelle et parce que je n'ai pas de place à toutes les actions, certaines d'entre elles sont accessibles sous le bouton de menu de débordement. Maintenant, je veux styler le menu de débordement et changer son arrière-plan. Mon thème hérite de thème.appcompat, et j'ai ces styles définis:

<item name="android:popupMenuStyle">@style/PopupMenu</item>
<item name="android:listPopupWindowStyle">@style/PopupMenu</item>
<item name="android:dropDownListViewStyle">@style/DropDownListView</item>

<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu">
    <!--<item name="android:popupBackground">@color/dark_color</item>-->
    <item name="android:textColor">?android:textColorPrimary</item>
    <item name="android:dropDownSelector">?popupItemBackground</item>
</style>

<style name="DropDownListView" parent="Widget.AppCompat.ListView.DropDown">
    <item name="android:listSelector">?popupItemBackground</item>
    <item name="android:divider">@null</item>
    <item name="android:dividerHeight">0dp</item>
</style>


3 commentaires

Avez-vous fait des progrès sur cela? J'ai trouvé actionmodepopwindowstyle dans plateforme_frameworks_base / core / res / res / res / valeurs / themes.xml et widget.popuwindow in plateforme_frameworks_base / noyau / res / res / résolution / styles.xml mais le remplacer dans mes styles ne semble pas avoir d'effet.


Je n'ai pas encore trouvé de solution ...


@JDJ j'ai trouvé une solution. Voir ma réponse ..


3 Réponses :


2
votes

Pour modifier l'arrière-plan du menu de débordement, vous devez remplacer l'attribut actionververflowmenustyle : xxx

digue bg_cab_popup peut être n'importe quel type de dessinable. Mais, en utilisant un 9 patch, il est logique.

Si vous devez changer autre chose que l'arrière-plan, s'il vous plaît laissez-moi un commentaire.


2 commentaires

J'essayais votre solution en entrant une valeur de couleur pour Popupbackground et n'a pas fonctionné comme prévu. Le résultat était une sorte de fond doublé et erroné pour le menu de débordement, mais cela le change. Lorsque j'essaie avec une ressource attise, cela fonctionne. Mais ensuite, j'ai besoin d'imiter le fond des autres menus de mon application, qui ont le formulaire par défaut (je change simplement la couleur). Puis-je simplement changer la couleur ici aussi ou dois-je rechercher la ressource Android qu'ils utilisent pour les antécédents de menu? Si tel est le cas, où puis-je le trouver? THX


@Sandra je n'ai pas essayé de passer une valeur de couleur à la place d'un digue. Le problème pourrait être que colordrawable (c'est la valeur de couleur enfin convertie en) n'a pas de largeur intrinsèque et de hauteur. J'utilise Photoshop pour la plupart des produits d'image. L'avantage évident est que vous pouvez avoir des thèmes complètement personnalisés. Quelque chose comme ceci: Menu de débordement BG à l'aide d'un .



0
votes

Je vais supposer que vous utilisez la bibliothèque de la dernière (21.x.x.x) AppCompat-V7 et avez adventé le nouveau widget code> widget. Pour réaliser ce que vous voulez, vous ne modifiez pas votre thème de l'application principal (à l'exception du mode d'action de sélection de texte), mais appliquez un style à la barre d'outils code> de votre présentation ( style = "@ style /Widget.yourapp.toolbar " code>). La définition de style peut sembler similaire à celle-ci:

<style name="Widget.PopupWindow">
    <item name="popupBackground">@drawable/editbox_dropdown_background_dark</item>
    <item name="popupAnimationStyle">@style/Animation.PopupWindow</item>
</style>


4 commentaires

La solution que vous suggérez fonctionne correctement pour la barre d'outils et son menu de débordement, mais ne fonctionne pas pour le menu de débordement dans la cabine. Je l'ai essayé et le menu de la barre d'action contextuelle n'est toujours pas stylé ...


S'il vous plaît voir la réponse mise à jour. Le mode d'action nécessite un style «ancienne école».


Merci pour votre aide jusqu'à présent, mais je ne peux toujours pas le faire travailler. J'ai mis en œuvre ActionModePopUwindowstyle dans le thème de mon activité et l'ai dirigé vers mon style personnalisé qui ressemble à ceci comme suit: ​​@ Couleur / light_theme_background . Cela ne fournit toujours pas de style pour le menu de débordement contextuel: ((


Essayez de mettre le actionmodepopwindowstyle à la barre d'outils au lieu de l'activité .



2
votes

J'ai enfin une solution. Il semble que vous ayez besoin d'ajouter ceci à votre thème: xxx

où: xxx

L'attribut Colorbackground peut prendre toute valeur de couleur que vous avez Comme et avec cela, vous avez le menu de débordement du bouton de l'action contextuelle.


0 commentaires