样式 appcompat-v7 工具栏菜单背景

Style appcompat-v7 Toolbar menu background

我正在尝试设置我的 appcompat-v7 工具栏的样式,以便为我的溢出菜单设置不同的背景颜色。 我尝试为我的应用程序使用主题,为我的工具栏使用样式,但我无法实现。

这是我的工具栏:

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"                                                                                                                              
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:layout_width="match_parent"
    app:theme="@style/AppToolbarTheme"
    android:layout_height="wrap_content">

这是我创建的样式:

    <style name="AppToolbarTheme" parent="Theme.AppCompat.NoActionBar">
       <item name="android:textColorPrimary">@color/white</item>
       <item name="android:textColorSecondary">@color/cian</item>
    </style>

我的主题是延伸Theme.AppCompat.Light。

有人知道我该怎么做吗?如果无法使用样式,还有其他方法可以实现吗?

在使用 AppCompat 属性时不要使用 android 命名空间。修改您的代码如下:

<style name="AppToolbarTheme" parent="Theme.AppCompat.NoActionBar">
       <item name="textColorPrimary">@color/white</item>
       <item name="textColorSecondary">@color/cian</item>
</style>

将此添加到您的工具栏元素

app:popupTheme="@style/ThemeOverlay.YourPopup"

然后在你的styles.xml定义弹出菜单样式

<style name="ThemeOverlay.YourPopup" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:colorBackground">@color/mtrl_white_100</item>
    <item name="android:textColor">@color/mtrl_light_blue_900</item>
</style>

<style name="ThemeOverlay.YourPopup" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:colorBackground">@color/mtrl_white_100</item>
    <item name="android:textColorPrimary">@color/mtrl_light_blue_900</item>
</style>

请注意,您需要使用 android:colorBackground 而不是 android:background。后者适用于所有没有背景的东西(这里是菜单本身和每个菜单项),前者仅适用于弹出菜单。

更新:同样适用于textColorPrimarytextColor

  • 弹出菜单项定义 android:textColor="?android:textColorPrimary"
  • android:textColorPrimary 是一个 theme 属性,它是在主题上定义的。
  • android:textColor 是一个 style 属性,它是在小部件上定义的。
  • 如果我们在主题中定义了 android:textColor,它将应用于每个未定义自己的 android:textColor 的小部件。

将此添加到 activity.xml 文件中的工具栏:-

app:popupTheme="@style/ThemeOverlay.YourApp"

然后在您的 styles.xml 中添加:-

<style name="ThemeOverlay.YourApp" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:colorBackground">@android:color/darker_gray</item>
        <item name="android:textColorPrimary">@color/TextColorPrimary</item>
    </style>