在 NoActionBar 上更改背景颜色弹出菜单
Change Background Color Popupmenu on NoActionBar
我仍然没有找到更改 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
在UI中没有任何作用。 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 按钮上),这里是如何在 Activity.
中创建 optionsMenu
@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;
}
是的,弹出菜单显示正确,但背景颜色仍然无法更改
这对我有用:
<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.create新款式
<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>
在你的 activity 添加 PopUpMenu 的地方 2.add 这行
Context wrapper = new ContextThemeWrapper(activity, R.style.popupMenuStyle);
final PopupMenu popup = new PopupMenu(wrapper, view);
当我使用 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>
我仍然没有找到更改 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
在UI中没有任何作用。 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 按钮上),这里是如何在 Activity.
中创建 optionsMenu @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;
}
是的,弹出菜单显示正确,但背景颜色仍然无法更改
这对我有用:
<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.create新款式
<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>
在你的 activity 添加 PopUpMenu 的地方 2.add 这行
Context wrapper = new ContextThemeWrapper(activity, R.style.popupMenuStyle);
final PopupMenu popup = new PopupMenu(wrapper, view);
当我使用 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>