Подтвердить что ты не робот

AppPompat ToolBar popupTheme не используется в элементе меню ShareAction

Контекст

Использование AppCompat v7 21.0.0/21.0.2/21.0.3

Проблема

PopupTheme ToolBar не применяется к 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 темнеет.

<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

4b9b3361

Ответ 1

Итак, вот что сработало для меня. Здесь моя панель инструментов 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, и я также переопределяю фон как 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>

Итак, в результате фон Share action установлен на значение фона в главной теме панели инструментов. И фон панели инструментов переоценивается.

Ответ 3

Я долго целует голову, пытаясь решить эту проблему. Я нашел решение своей проблемы. Hopefuully это также поможет другим:

В моем определении панели инструментов я настраивал пользовательскую тему следующим образом:

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