Barra de herramientas de AppCompat popupTheme no se utiliza en ShareAction MenuItem

Contexto

Uso de AppCompat v7 21.0.0 / 21.0.2 / 21.0.3

Problema

El popupTheme de la barra de herramientas no se aplica a ShareAction

Estilo en la barra de herramientas:

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

El elemento de menú desbordamiento está utilizando el popupTheme correctamente

Elemento de desbordamiento

El ShareAction por otro lado no recibe el popupTheme. Después de algunas pruebas me di cuenta de que recibió la aplicación: tema de la barra de herramientas, por lo tanto, oscuro.

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

Elemento del menú ShareAction

Con el fin de obtener el texto en negro en el ShareAction he intentado establecer muchos atributos y mediante la configuración de "android: textColorPrimary" (en el tema de la barra de herramientas) que conseguir lo que quiero, pero luego mis iconos en la barra de herramientas también toma este color que es raro. .

El menú xml es el siguiente:

 <?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> 

Esperaría que tanto el ShareAction y el desbordamiento para tener el popupTheme pero no es el caso

Solución

Voy a editar este post una vez que tengo una solución

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

Así que, esto es lo que funcionó para mí. Aquí está mi barra de herramientas 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" /> 

Tenga en cuenta que establezco el tema y popupTheme, y también anular el fondo para ser colorPrimary. Esta es la descripción principal del tema de la aplicación con temas para la barra de herramientas:

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

Por lo tanto, como resultado, el fondo de acción Compartir se establece en el valor de fondo en el tema principal de la barra de herramientas. Y el fondo de la propia barra de herramientas es overriden.

Esta página puede ayudar a resolver su problema: http://www.murrayc.com/permalink/2014/10/28/android-changing-the-toolbars-text-color-and-overflow-icon-color/

Una diferencia que noté en tu XML es que una vez usas la propiedad android: showAsAction = "ifRoom" y una vez cycle: showAsAction = "ifRoom".

Me estaba rascando la cabeza durante siglos tratando de resolver esto. Encontré una solución a mi problema. Hopefuully esto ayudará a otros también:

En mi definición de barra de herramientas estaba configurando un tema personalizado así:

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

En mi styles.xml, mi tema fue definido como:

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

Quería iconos de acción blanca en mi barra de herramientas, por lo que estaba estableciendo estos valores en blanco. Por desgracia, también estaba haciendo mi texto ShareActionProvider menú blanco (sobre un fondo blanco).

La solución para mí era eliminar la configuración de estilo de textColorPrimary . Mis iconos de la barra de herramientas seguían siendo blancos pero ahora tenía el texto oscuro deseado en el menú emergente del compartimiento del proveedor.

 <style name="ActionBarThemeOverlay" parent="ThemeOverlay.AppCompat.Light"> <item name="colorControlNormal">#fff</item> <item name="colorControlHighlight">#3fff</item> </style> 
  • Temas de Android: Defina colores / degradados en "baseTheme.xml", use dentro de controles, reemplace en "subThemeX.xml"
  • AlertDialog Tema: ¿Cómo cambiar el color del texto del artículo?
  • Cambio de tema de diálogo para cada cuadro de diálogo
  • Cómo hacer referencia a un estilo en un tema personalizado
  • Tema Programáticamente establecido. Cómo volver a cargar Actividad para aplicar
  • Android: ¿Acabo de tener un disparo por propiedad mediante el uso de temas? ¿No hay nada como CSS en Android?
  • Color del selector de lista de Android 4.4 Kit Kat
  • ¿Puedo configurar los estilos personalizados globales de aplicaciones para los widgets de Android-support-design?
  • ¿Por qué mi aplicación de Android no muestra el icono y el texto en ActionBar?
  • Android: No se puede diseñar el divisor de hilado
  • Cambiar y aplicar el tema en tiempo de ejecución en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.