AppCompat ToolBar popupTheme n'est pas utilisé dans ShareAction MenuItem

Le contexte

Utilisation de AppCompat v7 21.0.0 / 21.0.2 / 21.0.3

  • CoordinatorLayout Toolbar invisible sur enter jusqu'à pleine hauteur
  • Comment fonctionne Twitter OAuth dans Android?
  • Est-il possible de distribuer uniformément des boutons sur la largeur d'une couche linéaire linéaire
  • Fixer le poids (pourcentage) par programme
  • Comment ouvrir un SMS spécifique dans Android
  • Comment le mode doze affecte-t-il les services de fond / premier plan, avec / sans wakelocks partiels / complets?
  • Problème

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

    Style sur 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 du menu débordement utilise correctement le popupTheme

    Objet débordant

    Le ShareAction, d'autre part, ne reçoit pas le popupTheme. Après quelques tests, j'ai remarqué qu'il a reçu l'application: le thème de la barre d'outils étant ainsi sombre.

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

    Élément du menu ShareAction

    Pour obtenir le texte noir sur ShareAction, j'ai essayé de définir de nombreux attributs et, en configurant "android: textColorPrimary" (sur le thème ToolBar), je reçois ce que je veux, MAIS mes icônes sur la ToolBar prennent également cette couleur qui est étrange. .

    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'attends à ce que le ShareAction et le débordement aient le popupTheme mais ce n'est pas le cas

    Solution de contournement

    Je modifierai ce post une fois que j'ai eu une solution de contournement

    Ref: https://code.google.com/p/android/issues/detail?id=87285&thanks=87285&ts=1419254842

    3 Solutions collect form web for “AppCompat ToolBar popupTheme n'est pas utilisé dans ShareAction MenuItem”

    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 configuré à la fois le thème et le popupTheme, et j'ai également remplacé l'arrière-plan pour être ColorPrimary. Voici la description principale du thème de l'application avec les thèmes de 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> 

    Donc, par conséquent, l'arrière-plan de l'action Partage est défini sur la valeur d'arrière-plan dans le thème principal de la barre d'outils. Et l'arrière-plan de la barre d'outils elle-même est annulé.

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

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

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

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

    Dans mes styles.xml, mon thème a été défini comme suit:

     <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 blanche dans ma barre d'outils, donc je réglais ces valeurs en blanc. Malheureusement, cela faisait que mon texte de menu ShareActionProvider soit blanc (sur un fond blanc).

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

     <style name="ActionBarThemeOverlay" parent="ThemeOverlay.AppCompat.Light"> <item name="colorControlNormal">#fff</item> <item name="colorControlHighlight">#3fff</item> </style> 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.