コンテキスト
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のapp:themeテーマが受信され、暗くなっていることに気付きました。
<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とオーバーフローの両方にpopupThemeがあると予想しますが、そうではありません
回避策
回避策が得られたら、この投稿を編集します
参照: https://code.google.com/p/Android/issues/detail?id=87285&thanks=87285&ts=1419254842
だから、ここに私のために働いたものがあります。これが私のツールバー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" />
ThemeとpopupThemeの両方を設定し、さらにbackgroundを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>
したがって、結果として、共有アクションの背景は、メインのツールバーテーマの背景の値に設定されます。また、ツールバー自体の背景は上書きされます。
私はこれを解決しようとして長年頭を悩ませていました。問題の解決策を見つけました。これが他の人にも役立つことを願っています:
ツールバーの定義では、次のようなカスタムテーマを設定していました。
<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>
このページはあなたの問題の解決に役立つかもしれません: http://www.murrayc.com/permalink/2014/10/28/Android-changing-the-toolbars-text-color-and-overflow-icon-color /
あなたのXMLで私が気づいた1つの違いは、一度Android:showAsAction = "ifRoom"プロパティとcycle:showAsAction = "ifRoom"プロパティを使用することです。