AppCompat 21:name = colorPrimary不与name = actionBarStyle一起使用

Mar*_*rdi 4 layout android android-appcompat android-actionbar

当我使用itemBarStyle项时,colorPrimary不会将颜色设置为红色.如果我删除项目actionBarStyle,它的工作原理.如何更改我的代码以显示颜色?

<resources>

    <style name="AppTheme" parent="@style/Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/MyStyledActionBar</item>
        <item name="colorPrimary">@color/red</item>
    </style>

    <style name="MyStyledActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
        <item name="titleTextStyle">@style/MyActionBarTitleText</item>
    </style>

    <style name="MyActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/white</item>
    </style>

</resources>
Run Code Online (Sandbox Code Playgroud)

adn*_*eal 6

Widget.AppCompat.Light.ActionBaris 的根,Base.Widget.AppCompat.ActionBar不应用background属性.

<style name="Base.Widget.AppCompat.ActionBar" parent="">
    ...
    <item name="background">@null</item>
    <item name="backgroundStacked">@null</item>
    <item name="backgroundSplit">@null</item>
    ...
</style>
Run Code Online (Sandbox Code Playgroud)

相反,您的父级应该是Widget.AppCompat.Light.ActionBar.Solid,因此您将继承Base.Widget.AppCompat.Light.ActionBar.Solid应用background属性的属性.

<style name="Base.Widget.AppCompat.Light.ActionBar.Solid">
    <item name="background">?attr/colorPrimary</item>
    <item name="backgroundStacked">?attr/colorPrimary</item>
    <item name="backgroundSplit">?attr/colorPrimary</item>
</style>
Run Code Online (Sandbox Code Playgroud)

或者,您可以自己应用背景属性.

<style name="MyStyledActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/MyActionBarTitleText</item>
    <item name="background">?attr/colorPrimary</item>
</style>
Run Code Online (Sandbox Code Playgroud)