Изменить цвет фона всплывающего меню на NoActionBar - PullRequest
0 голосов
/ 18 марта 2019

Я до сих пор не нашел правильное решение для изменения цвета фона для PopupMenu.Но в этом случае я использую AppTheme.NoActionBar по определенной причине.Вот мой стиль

<style name="DarkThemeNoAppBar" parent="AppTheme.NoActionBar">
        <item name="backgroundcolor">#3d3b3b</item>
        <item name="cardbackground">#5e5b5b</item>
        <item name="textcolor">#ede7e7</item>
        <item name="textcolordrawer">#faf6f6</item>
        <item name="tintcolor">#d9d4d4</item>
        <item name="buttoncolor">#45b6ac</item>
        <item name="texttitlecolor">#ede7e7</item>
        <item name="backgroundcolorlayout">#181818</item>
        <item name="android:itemBackground">#181818</item>
        <item name="android:textColor">#ede7e7</item>
        <item name="popupMenuStyle">@style/popupMenuDarkStyle</item>
    </style>


    <style name="popupMenuDarkStyle" parent="Widget.AppCompat.PopupMenu">
        <item name="android:popupBackground">#181818</item>
    </style>

Если вы видите popupMenuStyle, этот popupMenuDarkStyle не дает никакого эффекта в пользовательском интерфейсе.Много литературы в Google решает эту проблему, но это только для Theme.AppCompat.Light.DarkActionBar, но в моем случае мне нужно использовать AppTheme.NoActionBar.Пожалуйста, кто-нибудь, дайте мне несколько советов.

ОБНОВЛЕНИЕ 2 ниже приведена вторая попытка

<style name="DarkThemeNoAppBar" parent="AppTheme.NoActionBar">
        <item name="backgroundcolor">#3d3b3b</item>
        <item name="cardbackground">#5e5b5b</item>
        <item name="textcolor">#ede7e7</item>
        <item name="textcolordrawer">#faf6f6</item>
        <item name="tintcolor">#d9d4d4</item>
        <item name="buttoncolor">#45b6ac</item>
        <item name="texttitlecolor">#ede7e7</item>
        <item name="backgroundcolorlayout">#181818</item>
        <item name="android:itemBackground">#181818</item>
        <item name="android:textColor">#ede7e7</item>
        <item name="android:popupMenuStyle">@style/popupMenuDarkStyle</item>
    </style>


    <style name="popupMenuDarkStyle" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:popupBackground">#181818</item>
    </style>

Мой PopupMenu прикреплен к optionMenu (на кнопке Burger), вот какoptionsMenu создан в Activity.

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Manual add menu
        menu.add(0, 1, 1, DesignUtil.menuIconWithText(getResources()
                .getDrawable(R.drawable.ic_bookmark_black), "Bookmark"));

        menu.add(0, 2, 1, DesignUtil.menuIconWithText(getResources()
                .getDrawable(R.drawable.ic_settings_black_24dp), "Settings"));

        return true;
    }

Да, всплывающее меню отображается правильно, но цвет фона по-прежнему нельзя изменить

Ответы [ 3 ]

1 голос
/ 18 марта 2019

Попробуйте, у меня все работает

шаг 1.создать новый стиль

 <style name="popupMenuStyle" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:textColor">#2FAC7E</item>
    <item name="android:textSize">18sp</item>
    <item name="android:itemBackground">#181818</item>
</style>

шаг 2. Добавьте эту строку в свою деятельность, где вы добавляете PopUpMenu

 Context wrapper = new ContextThemeWrapper(activity, R.style.popupMenuStyle);
 final PopupMenu popup = new PopupMenu(wrapper, view); 
1 голос
/ 19 марта 2019

Это работает для меня, когда я создал меню с помощью onCreateOptionMenu, попробуйте это

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:itemBackground">#181818</item>
    <item name="android:textColor">@color/colorAccent</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
</style>
0 голосов
/ 18 марта 2019

Это сработало для меня:

<style name="DarkThemeNoAppBar" parent="AppTheme.NoActionBar">
    <item name="backgroundcolor">#3d3b3b</item>
    <item name="cardbackground">#5e5b5b</item>
    <item name="textcolor">#ede7e7</item>
    <item name="textcolordrawer">#faf6f6</item>
    <item name="tintcolor">#d9d4d4</item>
    <item name="buttoncolor">#45b6ac</item>
    <item name="texttitlecolor">#ede7e7</item>
    <item name="backgroundcolorlayout">#181818</item>
    <item name="android:itemBackground">#181818</item>
    <item name="android:textColor">#ede7e7</item>
<!--The "android:" prefix is for a regular widget, such as android.widget.PopupMenu,
while the ones without this prefix are for the support library versions of these widgets-->
    <item name="popupMenuStyle">@style/popupMenuDarkStyle</item>
    <item name="android:popupMenuStyle">@style/popupMenuDarkStyle</item>
</style>


<style name="popupMenuDarkStyle" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:popupBackground">#181818</item>
</style>

Использование ThemeOverlay.AppCompat.Light в качестве родителя может быть необязательным, но я включил его, потому что так настроен мой и он работает.Ключ, вероятно, android:popupMenuStyle, а не popupMenuStyle.

...