【问题标题】:How do I customize menu item's background color?如何自定义菜单项的背景颜色?
【发布时间】:2016-09-07 06:34:12
【问题描述】:

我正在尝试自定义Toolbar 的弹出菜单。现在我无法设置菜单项的背景颜色。

我的 styles.xml 看起来像这样:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme.NoActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>

        <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item>
        <item name="android:actionMenuTextColor">@color/actionbar_text_color</item>
        <item name="android:dropDownListViewStyle">@style/AppTheme.DropDown</item>
        <item name="android:itemTextAppearance">@style/menuItemColor</item>

        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/AppTheme.ActionBar</item>
        <item name="actionMenuTextColor">@color/actionbar_text_color</item>
        <item name="dropDownListViewStyle">@style/AppTheme.DropDown</item>
        <item name="itemTextAppearance">@style/menuItemColor</item>
    </style>

    <style name="AppTheme.ActionBar" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">\
        <item name="titleTextColor">@color/actionbar_text_color</item>
        <item name="subtitleTextColor">@color/actionbar_text_color</item>

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

        <!-- Support library compatibility -->
        <item name="background">@color/actionbar_background</item>
    </style>

    <style name="AppTheme.DropDown" parent="@style/Widget.AppCompat.Light.ListView.DropDown">
        <item name="android:background">@color/background_color</item>
        <!-- Support library compatibility -->
        <item name="background">@color/background_color</item>
    </style>

    <style name="menuItemColor">
        <item name="android:textColor">@color/inactive_text_color</item>
    </style>

</resources>

我用代码将 ActionBar 添加到活动布局中

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:theme="@style/AppTheme.ActionBar"/>

注意:我使用的是 AppCompat,而不是 Holo 或其他。

【问题讨论】:

  • 你的活动主题是什么?
  • 我在AndroidManifest应用标签android:theme="@style/AppTheme.NoActionBar"中设置了主题。我也应该为活动设置主题吗?
  • 如果将该行更改为android:theme="@style/Theme.AppCompat.Light.NoActionBar" 会发生什么?有什么变化吗?
  • @Sufian 操作栏菜单的文本颜色更改为默认白色。其他所有颜色仍然是我的(当然弹出菜单除外)。
  • 一张图片如果你需要prntscr.com/cf3x1i颜色是酸性的,用于测试目的。暗框中的颜色不正确。应用主题是我的,不是Theme.AppCompat.Light.NoActionBar

标签: android menuitem android-appcompat android-toolbar


【解决方案1】:

这可能会对你有所帮助,创建一个类似的风格,

<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
<item name="android:popupBackground">@android:color/white</item>

并将其添加到您的主题中..

 <style name="AppTheme.NoActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
<item name="android:popupMenuStyle">@style/PopupMenu</item> <! added it here
    <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item>
    <item name="android:actionMenuTextColor">@color/actionbar_text_color</item>
    <item name="android:textColor">@color/text_color</item>

    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/AppTheme.ActionBar</item>
    <item name="actionMenuTextColor">@color/actionbar_text_color</item>
</style>

<style name="AppTheme.ActionBar" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">\
    <item name="titleTextColor">@color/actionbar_text_color</item>
    <item name="subtitleTextColor">@color/actionbar_text_color</item>
<item name="android:popupMenuStyle">@style/PopupMenu</item> <! added it here
    <item name="android:background">@color/actionbar_background</item>

    <!-- Support library compatibility -->
    <item name="background">@color/actionbar_background</item>
</style>

【讨论】:

    【解决方案2】:

    你必须像这样定义溢出菜单的样式:

    <!-- OverFlow menu Styles -->
    <style name="PopupMenuListView" parent="@style/Widget.AppCompat.Light.ListView.DropDown">
        <item name="android:divider">@color/sp_red_500</item>
        <item name="android:dividerHeight">1dp</item>
        <item name="android:background">@color/white</item>
    </style>
    

    并在您的父主题样式(基本应用程序主题。)中定义下拉菜单样式,如下所示:

     <item name="dropDownListViewStyle">@style/PopupMenuListView</item>
    

    【讨论】:

    • 我得到了一个有趣的结果。菜单背景为白色,但文字看起来像实心黑条。
    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2011-02-26
    相关资源
    最近更新 更多