Изменить цвет фона всплывающего меню на NoActionBar

#android #android-actionbar #popupmenu

#Android #android-панель действий #всплывающее меню

Вопрос:

Я все еще не нашел правильного решения для изменения цвета фона для 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>
  

Мое всплывающее меню прикреплено к 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;
    }
  

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

Ответ №1:

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

шаг 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. добавьте эту строку в свое действие, где вы добавляете всплывающее меню

  Context wrapper = new ContextThemeWrapper(activity, R.style.popupMenuStyle);
 final PopupMenu popup = new PopupMenu(wrapper, view); 
  

Комментарии:

1. На самом деле я создал меню с помощью onCreateOptionMenu

2. я обновил свой вопрос, у вас есть идея с моим условием кода

3. пожалуйста, проверьте другой ответ, может ли он вам помочь @NandaZ

4. я думаю, что принимаю этот ответ, потому что я изменил свой код на созданное всплывающее меню. Я больше не использую onCreateOptionsMenu , поэтому оно будет вызвано ImageView, привязкой к MyAppBar, и это работает. Спасибо

Ответ №2:

У меня это сработало, когда я создавал меню с помощью 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>
  

Комментарии:

1. Настройка android:textColor самой темы влияет на текст во всем приложении. Это неэффективный подход, если вы просто хотите изменить цвет текста во всплывающем меню.

Ответ №3:

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

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

Комментарии:

1. Извините, у меня все еще не сработало. Я обновил вопрос, который я написал, основываясь на вашей идее