web-dev-qa-db-fra.com

AppCompat ToolBar popupTheme non utilisé dans le ShareAction MenuItem

Contexte

Utilisation d'AppCompat v7 21.0.0/21.0.2/21.0.3

Problème

Le popupTheme de la ToolBar n'est pas appliqué à la ShareAction

Style dans la barre d'outils:

<style name="MyActionBarStyle" parent="Widget.AppCompat.Toolbar">
    <item name="Android:background">@color/green</item>
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

L'élément de menu de débordement utilise correctement le popupTheme

Overflow Item

Le ShareAction en revanche ne reçoit pas le popupTheme. Après quelques tests, j'ai remarqué qu'il recevait l'application: le thème de la barre d'outils étant donc sombre.

<item name="Android:colorBackground">@color/white</item>

ShareAction Menu Item

Afin d'obtenir le texte noir sur la ShareAction, j'ai essayé de définir de nombreux attributs et en définissant "Android: textColorPrimary" (sur le thème ToolBar) j'obtiens ce que je veux MAIS alors mes icônes sur la ToolBar prennent également cette couleur qui est bizarre .. .

Le menu xml est le suivant:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:cycle="http://schemas.Android.com/apk/res-auto">

    <item
        Android:id="@+id/ic_share"
        Android:icon="@drawable/abc_ic_menu_share_holo_dark"
        Android:title="@string/media_share"
        cycle:showAsAction="ifRoom"
        cycle:actionProviderClass="Android.support.v7.widget.ShareActionProvider" />
    <item
        Android:icon="@drawable/abc_ic_menu_share_holo_dark"
        Android:showAsAction="ifRoom"
        Android:title="br">
        <menu>
            <item
                Android:id="@+id/menuSortNewest"
                Android:title="Sort by newest" />
            <item
                Android:id="@+id/menuSortRating"
                Android:title="Sort by rating" />
        </menu>
    </item>

</menu>

Je m'attendrais à ce que le ShareAction et le débordement aient le popupTheme mais ce n'est pas le cas

Solution

Je modifierai ce message une fois que j'aurai trouvé une solution de contournement

Réf: https://code.google.com/p/Android/issues/detail?id=87285&thanks=87285&ts=1419254842

29
Benoit

Alors, voici ce qui a fonctionné pour moi. Voici ma barre d'outils xml:

<?xml version="1.0" encoding="utf-8"?>
<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/action_bar_main"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent"
    app:theme="@style/Toolbar"
    app:popupTheme="@style/Toolbar_Popup"
    Android:minHeight="?attr/actionBarSize"
    Android:background="?attr/colorPrimary" />

Notez que j'ai défini à la fois le thème et le popupTheme, et j'ai également remplacé l'arrière-plan par colorPrimary. Voici la description principale du thème de l'application avec des thèmes pour la barre d'outils:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:actionMenuTextColor">@color/white</item>

    <!-- Support library compatibility -->
    <item name="actionMenuTextColor">@color/white</item>

    <item name="actionBarSize">@dimen/actionbar_height</item>

    <item name="colorPrimary">@color/dark_blue</item>
    <item name="colorPrimaryDark">@color/dark_blue</item>
    <item name="Android:textColorPrimary">#607d8b</item>

</style>

<style name="Toolbar" parent="Base.ThemeOverlay.AppCompat.ActionBar">
    <item name="Android:textColorPrimary">#fff</item>
    <item name="Android:background">@color/dark_blue</item>
</style>

<style name="Toolbar_Popup" parent="Base.ThemeOverlay.AppCompat.ActionBar">
    <item name="Android:textColorPrimary">#fff</item>
    <item name="Android:background">@color/dark_blue</item>
</style>

Par conséquent, le fond d'action Partager est défini sur la valeur de fond dans le thème principal de la barre d'outils. Et l'arrière-plan de la barre d'outils elle-même est remplacé.

29
AAverin

Je me grattais la tête depuis des siècles pour essayer de résoudre ce problème. J'ai trouvé une solution à mon problème. Espérons que cela aidera également les autres:

Dans ma définition de barre d'outils, je définissais un thème personnalisé comme suit:

<Android.support.v7.widget.Toolbar     
    ...
    app:theme="@style/ActionBarThemeOverlay"
    ... />

Dans mon styles.xml, mon thème était défini comme:

<style name="ActionBarThemeOverlay" parent="ThemeOverlay.AppCompat.Light">
    <item name="Android:textColorPrimary">#fff</item>
    <item name="colorControlNormal">#fff</item>
    <item name="colorControlHighlight">#3fff</item>
</style>

Je voulais des icônes d'action blanches dans ma barre d'outils, alors je mettais ces valeurs en blanc. Malheureusement, le texte du menu ShareActionProvider était également blanc (sur fond blanc).

La solution pour moi était de supprimer le paramètre de style pour textColorPrimary. Mes icônes de barre d'outils étaient toujours blanches mais j'avais maintenant le texte sombre souhaité dans le menu contextuel du fournisseur de partage.

<style name="ActionBarThemeOverlay" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorControlNormal">#fff</item>
    <item name="colorControlHighlight">#3fff</item>
</style>
0
Paul LeBeau

Cette page peut aider à résoudre votre problème: http://www.murrayc.com/permalink/2014/10/28/Android-changing-the-toolbars-text-color-and-overflow-icon-color /

Une différence que j'ai remarquée dans votre XML est que vous utilisez une fois la propriété Android: showAsAction = "ifRoom" et une fois cycle: showAsAction = "ifRoom".

0
Lukas