上下文
使用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。经过一些测试后,我注意到它收到了应用程序:ToolBar的主题因此是黑暗的。
<item name="android:colorBackground">@color/white</item>
为了获得ShareAction上的黑色文本,我尝试设置了许多属性并通过设置“android:textColorPrimary”(在ToolBar主题上)我得到了我想要的但是我在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&amp;溢出有popupTheme但事实并非如此
解决方法
一旦我得到解决方法,我就会编辑这篇文章
参考:https://code.google.com/p/android/issues/detail?id=87285&thanks=87285&ts=1419254842
答案 0 :(得分:29)
所以,这对我有用。 这是我的工具栏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" />
请注意,我设置了主题和弹出主题,并且我也将背景覆盖为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>
因此,共享操作背景设置为主工具栏主题中的背景值。并且工具栏本身的背景被覆盖。
答案 1 :(得分:0)
此页面可能有助于解决您的问题:http://www.murrayc.com/permalink/2014/10/28/android-changing-the-toolbars-text-color-and-overflow-icon-color/
我在你的XML中注意到的一个区别是你曾经使用过属性android:showAsAction =“ifRoom”和一次循环:showAsAction =“ifRoom”。
答案 2 :(得分:0)
我试图解决这个问题已经摸不着头脑了。我找到了解决问题的方法。 HopeFully这也将有助于其他人:
在我的工具栏定义中,我设置了一个自定义主题,如下所示:
<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菜单文本变白(在白色背景上)。
我的解决方案是删除textColorPrimary
的样式设置。我的工具栏图标仍为白色,但我现在在弹出共享提供程序菜单中有所需的深色文本。
<style name="ActionBarThemeOverlay" parent="ThemeOverlay.AppCompat.Light">
<item name="colorControlNormal">#fff</item>
<item name="colorControlHighlight">#3fff</item>
</style>