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