web-dev-qa-db-ja.com

AppCompat ToolBar popupThemeはShareAction MenuItemで使用されません

コンテキスト

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を適切に使用しています

Overflow Item

一方、ShareActionはpopupThemeを受け取りません。いくつかのテストの後、ToolBarのapp:themeテーマが受信され、暗くなっていることに気付きました。

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

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

29
Benoit

だから、ここに私のために働いたものがあります。これが私のツールバー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>

したがって、結果として、共有アクションの背景は、メインのツールバーテーマの背景の値に設定されます。また、ツールバー自体の背景は上書きされます。

29
AAverin

私はこれを解決しようとして長年頭を悩ませていました。問題の解決策を見つけました。これが他の人にも役立つことを願っています:

ツールバーの定義では、次のようなカスタムテーマを設定していました。

<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>
0
Paul LeBeau

このページはあなたの問題の解決に役立つかもしれません: 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"プロパティを使用することです。

0
Lukas