Reputation: 49
When i'm using the item actionBarStyle, colorPrimary doesn't set the color to red. If i delete the item actionBarStyle, it works. How can i change my code to display the color?
<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>
Upvotes: 4
Views: 2258
Reputation: 30804
The root of Widget.AppCompat.Light.ActionBar
is Base.Widget.AppCompat.ActionBar
, which doesn't apply a background attribute.
<style name="Base.Widget.AppCompat.ActionBar" parent="">
...
<item name="background">@null</item>
<item name="backgroundStacked">@null</item>
<item name="backgroundSplit">@null</item>
...
</style>
Instead your parent should be Widget.AppCompat.Light.ActionBar.Solid
, so that you'll inherit the attributes from Base.Widget.AppCompat.Light.ActionBar.Solid
, which applies the background attribute.
<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>
Alternatively, you could just apply the background attribute yourself.
<style name="MyStyledActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="titleTextStyle">@style/MyActionBarTitleText</item>
<item name="background">?attr/colorPrimary</item>
</style>
Upvotes: 6