如何更改操作栏中下拉菜单的背景颜色

3
我正在开发一个安卓应用程序,但在设计我的操作栏时遇到了一些问题。我使用的是黑色操作栏,并带有白色图标。当我点击溢出图标时,弹出一个下拉菜单。一切都很好,但是我需要轻背景和红色文本的下拉菜单。我已经尝试编辑styles.xml中的主题,但只有在使用浅色主题时才能更改下拉菜单的背景颜色。

当我将Theme.Base.AppCompat.Light.DarkActionBar更改为Theme.Base.AppCompat.Light时,可以获得浅色下拉菜单,但其他图标如“搜索”会变得非常浅,几乎看不见(请参阅第二张图片)。 我该如何将下拉菜单中的文本颜色从黑色更改为红色,并使“搜索”图标可见。

enter image description here enter image description here

以下是代码,以获取更多信息

styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.Base.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="android:popupMenuStyle">@style/MyPopUpMenu</item>
</style>

<!-- ActionBar styles -->
<style name="MyActionBar"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/gloryred</item>
</style>

<style name="MyPopUpMenu"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:popupMenuStyle">@color/white</item>
</style>

menu_actions.xml

<?xml version="1.0" encoding="utf-8"?>

<item android:id="@+id/action_search"
    android:title="@string/action_search"
    android:icon="@drawable/ic_action_search"
    com.example.unitedstates.app:showAsAction="ifRoom"
    com.example.unitedstates.app:actionViewClass="android.widget.SearchView"/>

<item android:id="@+id/action_overflow"
    android:title="@string/action_overflow"
    android:icon="@drawable/ic_action_overflow"
    com.example.unitedstates.app:showAsAction="ifRoom">
    <menu>
        <item
            android:id="@+id/action_help"
            android:title="@string/action_help"
            android:icon="@drawable/ic_action_help"
            android:showAsAction="never"/>
        <item
            android:id="@+id/action_about"
            android:title="@string/action_about"
            android:icon="@drawable/ic_action_about"
            android:showAsAction="never"/>
        <item
            android:id="@+id/action_feedback"
            android:title="@string/action_feedback"
            android:icon="@drawable/ic_action_feedback"
            android:showAsAction="never"/>
    </menu>
</item>

3个回答

5
您可以像这样更改actionbardropdown menu的背景颜色和文本颜色。

在styles.xml中设置弹出式菜单的样式。

 <style name="PopupMenuStyle" parent="Theme.AppCompat.Light">

         <item name="android:background">@color/YourColor</item>
         <item name="android:textColor">@Color/YourColor</item>

</style>

现在将这个样式设置为您的工具栏的popupTheme
<android.support.v7.widget.Toolbar  
      xmlns:app="http://schemas.android.com/apk/res-auto"          
      xmlns:android="http://schemas.android.com/apk/res/android"

          // rest of your code
      app:popupTheme="@style/PopupMenuStyle" />

1
这是我对于使用Material主题和androidx.appcompat的人们所提供的解决方案:
在使用appcompat:1.2.0版本时,您需要创建一个res/drawable/mtrl_popupmenu_background.xml文件并设置自定义颜色:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <solid android:color="?attr/colorPrimaryDark"/>

  <corners
      android:bottomLeftRadius="4dp"
      android:bottomRightRadius="4dp"
      android:topLeftRadius="4dp"
      android:topRightRadius="4dp"/>

  <padding
      android:bottom="8dp"
      android:top="8dp"/>

</shape>

然后创建一个专门的主题:
<style name="YouTheme.PopupMenuStyle">
    <item name="actionOverflowMenuStyle">@style/YouThemePopupMenu.Overflow</item>
</style>

<style name="YouThemePopupMenu" parent="@style/Widget.MaterialComponents.PopupMenu"/>

<style name="YouThemePopupMenu.Overflow" parent="@style/Widget.MaterialComponents.PopupMenu.Overflow">
    <item name="android:dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
    <item name="android:popupBackground">@drawable/mtrl_popupmenu_background</item>
</style>

然后在您的工具栏中使用它:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?actionBarSize"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    app:contentInsetStartWithNavigation="0dp"
    app:layout_scrollFlags="scroll|enterAlways"
    app:popupTheme="@style/YourTheme.PopupMenuStyle"/>

0

如果你想使用黑色背景,可以通过以下简单的方式进行操作:res > drawable-hdpi > menu_dropdown_panel_example.9.png 这是一个九宫格图片,除了黑线以外,将其颜色替换为黑色或光荣红色即可。

同样的操作也需要在以下文件中进行: res>drawable-mdpi>menu_dropdown_panel_example.9.png res>drawable-xhdpi>menu_dropdown_panel_example.9.png res>drawable-xxhdpi>menu_dropdown_panel_example.9.png


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