使用Theme.AppCompat时,Android菜单背景为什么是黑色的?

25
由于某种原因,在我的应用程序中,当使用"Theme.AppCompat"作为我的样式时,它会使我的菜单变成黑色文本(我设置的颜色是黑色),出现在深灰色的背景上,如下所示:
``` 对于某些原因,在我的应用程序中,使用“Theme.AppCompat”作为我的样式时,会将我的菜单设置为黑色文本(我希望使用黑色文本),放置在深灰色的背景上,如下图所示: ```
我已经尝试使用一些在线资源手动设置菜单的背景颜色,但似乎都不起作用。有人知道可能是什么原因吗?以下是我的style.xml,你可以看到,主要应用程序主题条目中的最后两个元素是我尝试使用我找到的内容来更改背景颜色。
```html 我尝试过使用一些在线资源手动设置菜单的背景颜色,但似乎都不起作用。有人知道可能是什么原因吗?以下是我的style.xml。你可以看到,主应用程序主题入口处的最后两个元素是我使用我找到的东西来尝试更改背景颜色。 ```
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat">
    <item name="windowActionBar">false</item>
    <item name="android:windowBackground">@color/white_primary</item>
    <item name="android:textColor">@color/text_primary</item>
    <item name="android:textSize">@dimen/text_size_medium</item>
    <item name="colorAccent">@color/black_primary</item>
    <item name="android:popupMenuStyle">@style/PopupMenuStyle</item>
    <item name="android:panelFullBackground">@drawable/menu_full_bg</item>
</style>

<style name="PopupMenuStyle" parent="Theme.AppCompat.Light">
    <item name="android:popupBackground">@android:color/white</item>
</style>

<drawable name="menu_full_bg">#FFFFFF</drawable>

:空段落标签。
7个回答

34

您可以按照以下方式更改弹出菜单的背景颜色。

  1. 在styles.xml中创建一个样式

  2. <style name="PopupMenuStyle" parent="Theme.AppCompat.Light">
         <item name="android:background">@android:color/white</item>
    </style>
    
    将此主题设置为您的toolbar.xml中的工具栏弹出式主题。
     <android.support.v7.widget.Toolbar     
        xmlns:app="http://schemas.android.com/apk/res-auto"    
        xmlns:android="http://schemas.android.com/apk/res/android"
    
            // Your code here
           app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
           app:popupTheme="@style/PopupMenuStyle" />
    

希望这可以帮助到您。


4
你是我的英雄。我太开心了,差点要哭出来。我简直不敢相信我找到了一个在5.1.1上真正有效的解决方案。 - Sam
这个对我没用,但是这个链接有效:https://dev59.com/hF8d5IYBdhLWcg3wsDxW - Android

4
您可以使用appNS来定义弹出主题,如下所示。
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

4
我所做的是将我的弹出主题更改为DayNight,因此使用:

    app:popupTheme="@style/ThemeOverlay.AppCompat.DayNight">

2

请参考此链接

这里的接受答案对我很有用。我只是在这里再次重复同样的答案。 将以下内容添加到您的工具栏xml中

<android.support.v7.widget.Toolbar 
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:background="@color/toolbarbackground"
     android:elevation="4dp"
     app:popupTheme="@style/YOUR_THEME_HERE"
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

在你的styles.xml文件中:
<style name="YOUR_THEME_HERE" parent="ThemeOverlay.AppCompat.Light">
 <item name="android:colorBackground">#000000</item>
 <item name="android:textColor">#ffffff</item>
</style>

上述样式在黑色背景上显示白色字体。
感谢#Eugen Pechanec。

1

我尝试将这个添加到工具栏中:

app:popupTheme="@style/Theme.AppCompat.Light"

但是在夜间模式下,背景将是白色,文本也是白色的。 (这只有在白天模式下有用,或者您的应用程序不遵循日/夜切换)
另一个尝试,我为菜单弹出添加了这个样式,就像Pojaa上面提到的:
<style name="PopupMenuStyle" parent="Theme.AppCompat.Light">
     <item name="android:background">@android:color/white</item>
</style>

但是这样会产生一个效果:当你点击菜单时,它首先显示弹出菜单的白色背景,然后再显示项目,这对用户体验非常不好。也许随着时间的推移,Android的体验会有所不同!
你应该尝试按照自己的意愿进行操作:
app:popupTheme="@style/Theme.AppCompat.DayNight"

这是一个晚回答,但希望对其他人有所帮助!

1

我不赞成这行:

    <item name="android:background">@android:color/white</item>

在我的设备上,菜单弹出动画表现得相当丑陋。取而代之的是,只需使用以下内容即可:
<style name="PopupMenuStyle" parent="Theme.AppCompat.Light">
</style>

0

不确定这是否有帮助。可能有一个更简单的解决方案。在AppCompat - themes_base.xml中,您会找到以下部分。

<!-- Panel attributes -->
            <item name="panelMenuListWidth">@dimen/abc_panel_menu_list_width</item>
            <item name="panelMenuListTheme">@style/Theme.AppCompat.CompactMenu</item>
            <item name="panelBackground">@drawable/abc_menu_hardkey_panel_mtrl_mult</item>
            <item name="android:panelBackground">@android:color/transparent</item>
            <item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_dark</item>

在您的应用程序中创建一个主题并应用颜色。
<style name="Theme.Base" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:panelBackground">@android:color/black</item>
    </style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接