未在ShareAction MenuItem中使用AppCompat ToolBar popupTheme

上下文

使用AppCompat v7 21.0.0 / 21.0.2 / 21.0.3

问题

ToolBar的popupTheme不应用于ShareAction

工具栏上的样式

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

溢出菜单项正确使用popupTheme

溢出项目

另一方面ShareAction没有收到popupTheme。 经过一些testing,我发现它收到了ToolBar的应用程序主题,因此变黑了。

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

ShareAction菜单项

为了获得ShareAction上的黑色文本,我尝试设置许多属性,并通过设置“android:textColorPrimary”(在ToolBar主题上)我得到我想要的,但是,然后我的工具栏上的图标也采取这种奇怪的颜色.. 。

菜单xml如下:

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

我期望ShareAction和溢出都有popupTheme,但事实并非如此

解决方法

一旦我find解决方法,我将编辑这个post

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

Solutions Collecting From Web of "未在ShareAction MenuItem中使用AppCompat ToolBar popupTheme"

所以,这是为我工作。 这是我的工具栏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" /> 

请注意,我同时设置了主题和popupTheme,并且我也将背景replace为colorPrimary。 这里是主要的应用程序主题描述与工具栏的主题:

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

因此,共享操作背景被设置为主工具栏主题中背景的值。 工具栏本身的背景被覆盖。

此页面可能有助于解决您的问题: http : //www.murrayc.com/permalink/2014/10/28/android-changing-the-toolbars-text-color-and-overflow-icon-color/

我注意到你的XML的一个区别是,你曾经使用属性android:showAsAction =“ifRoom”和一次循环:showAsAction =“ifRoom”。

为了解决这个问题,我一直在挠头。 我find了解决我的问题。 希望这也能帮助别人:

在我的工具栏定义中,我设置了一个自定义主题:

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

在我的styles.xml中,我的主题被定义为:

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

我想在我的工具栏中使用白色动作图标,所以我将这些值设置为白色。 不幸的是,它也使我的ShareActionProvider菜单文本白色(在白色背景上)。

我的解决scheme是删除textColorPrimary的样式设置。 我的工具栏图标仍然是白色,但我现在popup共享提供程序菜单中所需的黑色文本。

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