48

I found some questions about this problem around the web. Unfortunately, everything i try so far, has been unsuccessful.

Has the title say, i need to change the background color of my action bar.

The project have a min sdk of 9, and max sdk of 19.

I have create in my res/values folder, an xml file:

red_actionbar.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="background">@color/red</item>
    </style>
</resources>

the colors.xml stored in res/values

<resources>
    <color name="red">#FF0000</color>
</resources>

and the part of the manifest where i change the theme

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/CustomActionBarTheme" >

But nothing changes. Where is the problem? The application accepts the code because if i change ths:

<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">

to

<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar ">

it does change the theme of my app, so the problem is in the style but I don't know how to solve it.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle" tools:ignore="NewApi">@style/MyActionBar</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:background"  tools:ignore="NewApi">@color/red</item>
        <item name="background">@color/red</item>
    </style>
</resources>
Tim Biegeleisen
  • 502,043
  • 27
  • 286
  • 360
Bombolo
  • 749
  • 2
  • 8
  • 19
  • what version of android has the device where do you test the code? – Blackbelt Apr 18 '14 at 14:08
  • Android 4.2.2 samsung s2 plus – Bombolo Apr 18 '14 at 14:15
  • 1
    Theming is always tricky. It's a big mess and poorly documented. On another note, do you need to support a minimum Android SDK of 9? You will cover the vast majority of devices running 15 or higher.... just sayin.. – angryITguy Apr 01 '16 at 01:55

4 Answers4

123
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background"  tools:ignore="NewApi">@color/red</item>
    <item name="background">@color/red</item>
</style>

<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">
    <item name="android:actionBarStyle"   tools:ignore="NewApi">@style/MyActionBar</item>
    <item name="actionBarStyle">@style/MyActionBar</item>

</style>

you need both android:background and background items. The former is for newer versions of android that support ActionBar natively. The latter is for older android versions.

EDIT

instead of <resources> use

<resources xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">

From SDK 21

to change Action Bar background color, add this to ActionBarTheme, and the two colours are to be different or it will not work (thanks to @Dre and @lagoman)

<item name="colorPrimary">@color/my_awesome_red</item> 
<item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
JerabekJakub
  • 5,268
  • 4
  • 26
  • 33
Blackbelt
  • 156,034
  • 29
  • 297
  • 305
  • Can't use android:actionBarStyle because my min-sdk is 9 – Bombolo Apr 18 '14 at 14:24
  • 1
    I get error if i use android:actionBarStyle android:actionBarStyle requires API level 11 (current min is 9) – Bombolo Apr 18 '14 at 14:28
  • add tools:ignore="NewApi" to the items with the android: prefix. – Blackbelt Apr 18 '14 at 14:28
  • i have try, but i get this error, error: Error parsing XML: unbound prefix – Bombolo Apr 18 '14 at 14:29
  • can you post the complete file? – Blackbelt Apr 18 '14 at 14:30
  • I have added the file. – Bombolo Apr 18 '14 at 14:32
  • It works! thank you! but if i put ignore newapi can i have some problem in some devices? – Bombolo Apr 18 '14 at 14:35
  • 5
    If you have updated SDK to API level 21, to change Action Bar background color, add this to `ActionBarTheme`: @color/my_awesome_red @color/my_awesome_darker_red This is according to: [http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html](http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html) – Mladen Oct 24 '14 at 11:05
  • 3
    Just something to note, colorPrimary and colorPrimaryDark shouldn't be the same color. If they are, Android will not color the action bar. – Dre Jan 09 '15 at 10:03
  • 3
    I couldn't tell you how many threads I poured through that didn't work until I found this one. Thanks a ton! – Cora Jul 16 '15 at 11:23
  • 15
    Nothing seems to work. It is amazing how much time you should spend for doing a simple thing as setting background color of an action bar... – bashan Sep 20 '15 at 16:40
18

Try this:

<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="actionBarStyle">@style/MyActionBar</item>

</style>

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">

    <item name="android:background">@color/red</item>
    <item name="background">@color/red</item>

</style>
Zohra Khan
  • 5,182
  • 4
  • 25
  • 34
9

Try this.

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary"> #6699FF </item>
</style>

You can change #6699FF color according to your choice (or use a color resource).

rupinderjeet
  • 2,984
  • 30
  • 54
Mukul Aggarwal
  • 1,515
  • 20
  • 16
1

try to use

parent="Theme.AppCompat.Light"

instead of

parent="@style/Theme.AppCompat.Light"
heloisasim
  • 4,956
  • 2
  • 27
  • 36