android appcompat v22 2 全局主题覆盖汉堡图标的工具栏主题

android appcompat v22 2 Global theme overrides toolbar theme for burger icon

我正在使用支持库 AppCompat v7 22.2。我的应用程序使用我按如下方式设置的浅色主题

<style name="Theme.SM3Theme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/s3m_primary</item>
    <item name="colorPrimaryDark">@color/s3m_primary_dark</item>
    <item name="colorAccent">@color/s3m_accent</item>
</style>

在我的清单中我有

<application
    android:allowBackup="false"
    android:icon="@drawable/icon"
    android:theme="@style/Theme.SM3Theme"

我希望我的工具栏以深色为主题,这样我就可以在深色背景上获得浅色,就像这样

<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/sm3_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/s3m_primary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/Theme.AppCompat"
app:popupTheme="@style/ThemeOverlay.AppCompat"
android:gravity="center" >

它几乎可以正常工作。我没有 post 图片所需的 10 声望,但 DrawerLayout 的汉堡图标始终为黑色,以符合全局主题的 Light 主题。后退箭头和标题文本为light/white,与工具栏中指定的主题一致。

我似乎无法改变这一点。在版本 21 上运行良好,但在出现 "IllegalArgumentException: AppCompat does not support the current theme features" 错误之前我不必使用 Theme.AppCompat.Light.NoActionBar。

有人知道如何让它工作吗?发生在 Lollipop 和 Jellybean 4.3

您使用了错误的主题,您需要在工具栏中使用这些主题

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

您应该可以使用 colorControlNormal 属性更改该颜色。尝试定义新样式:

<style name="ToolbarTheme" parent="Theme.AppCompat">
    <item name="colorControlNormal">@color/white</item>
</style>

并在工具栏上使用 android:theme="@style/ToolbarTheme"

看起来 AppCompat 的 ThemeOverlays 将 colorControlNormal 属性设置为 android:textColorPrimary,这绝对不是我们要找的,因为它会坚持你的主题设置 - 一个轻的,在你的情况下。

在您的应用主题 Theme.SM3Theme 中添加以下内容

<item name="drawerArrowStyle">@style/Widget.SM3Theme.DrawerArrowToggle</item>

创建样式Widget。SM3Theme.DrawerArrowToggle如下:

<style name="Widget.SM3Theme.DrawerArrowToggle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="color">@android:color/white</item>
</style>