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
- Icono de aplicación no aparece en Actionbar (Android Studio 1.0.1)
- Escribir aplicaciones temáticas en Android
- ¿Cómo establecer el tema en ProgressDialog?
- Cambio del icono de la barra de acciones
- Android: Actividad de pantalla completa con barra de título
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
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>
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
- ScrollView: Cambia el color del efecto de borde con Holo
- PhoneGap 3.x Android - Tema de Popup / Dialog nativo
- Diseño de widget Android - fondo negro predeterminado
- Theme.Translucent falla en ICS
- Android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen" No funciona android
- Temas de Android dificultan la implementación de la más simple: personalizado por color de tema
- Error al agregar tema personalizado a la aplicación
- ActionBarSherlock apilado barra de acción estilo problema
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>
- Error de clase no encontrada después de actualizar las herramientas de ADT y Android sdk a la última versión 22
- Utilizando la barra de herramientas home as up button, la actividad de inicio saveInstanceState siempre es nula