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

时间:2015-06-08 14:04:52

标签: android toolbar android-theme appcompat-v7-r22.2

我正在使用支持库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" >

它几乎可以工作。我没有发布图像所需的10个声誉,但DrawerLayout的汉堡图标始终是黑色的,与全局主题的Light主题一致。后箭头和标题文本为浅色/白色,与工具栏中指定的主题一致。

我似乎无法改变这一点。在版本21中工作得很好,但之后我没有使用Theme.AppCompat.Light.NoActionBar,直到我得到了#34; IllegalArgumentException:AppCompat不支持当前的主题功能&#34;错误。

有人知道如何让它发挥作用吗?发生在Lollipop和Jellybean 4.3上。

3 个答案:

答案 0 :(得分:1)

在您的应用主题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>

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

看起来AppCompat的ThemeOverlaycolorControlNormal属性设置为android:textColorPrimary,这绝对不是我们想要的,因为它会坚持主题在你的情况下,你已经设置了一个轻型的。