44

I've inherited the Holo Light Theme and customized the background of the ActionBar with the following:

Content of styles.xml

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="ActionBar" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:background">@drawable/actionbar_background</item> </style> <style name="MyTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:actionBarStyle">@style/ActionBar</item> </style> </resources> 

Content of actionbar_background.xml

<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@raw/actionbar_background" android:tileMode="repeat" /> 

Instead of being repeated, the image is stretched, any idea of why android:tileMode="repeat" is not applied?

Thanks in advance

5 Answers 5

44
Drawable d=getResources().getDrawable(R.drawable.background_image_name); getActionBar().setBackgroundDrawable(d); 

The above code sets the background image for the action bar.
Hope it helps.

Sign up to request clarification or add additional context in comments.

1 Comment

but why its not supporting below version like 2.2, 2.3.3, and so on
43

Ok, thanks to Romain Guy on #android-dev IRC channel, it's a known bug on honeycomb / Android 3.0 which will be fixed on the next release. Since then, the only solution is do it from code, and it works :-)

 final ActionBar actionBar = getActionBar(); BitmapDrawable background = new BitmapDrawable (BitmapFactory.decodeResource(getResources(), R.raw.actionbar_background)); background.setTileModeX(android.graphics.Shader.TileMode.REPEAT); actionBar.setBackgroundDrawable(background); 

5 Comments

May i ask how you did it from code? How to set to be tileMode repeat? I always got null when try to get the action bar
I've done it like this: final ActionBar actionBar = getActionBar(); BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.raw.actionbar_background)); background.setTileModeX(android.graphics.Shader.TileMode.REPEAT); actionBar.setBackgroundDrawable(background);
@rnoway , it would be better to add your comment as an edit in your answer. You should mark the answer as resolution, because it fixes the problem.
For me it works if I call invalidateMenuOptions after setBackgroundDrawable without making any assumptions about the type of Drawable
@rnoway: Why did you define actionBar property final? How defining it final affects it? Sorry i'm new to Java and Android. Thanks
5

You can easily do this thing. If you would like to change Action Bar background image then you place this code to your res/styles.xml file.

 <style name="Theme.MyAppTheme" parent="@android:style/Theme.Holo"> <item name="android:actionBarStyle">@style/Theme.MyAppTheme.ActionBar</item> </style> <style name="Theme.MyAppTheme.ActionBar" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:background">@drawable/top_black_bg</item> </style> 

For this you have to select an image from "drawable" folder . Here I select an image "tp_black_bg.png"

After that don't forget to declare this theme to your AndroidManifest.xml file

 <application . . . android:theme="@style/Theme.MyAppTheme" >.............</application> 

Now you can reopen any XML layout file , you can easily see the effect. In the same way you can also able to change the background color of ActionBar.

Thanks.

Comments

3
mActionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.navbar)); 

Comments

2

Use getSupportActionBar() from android.support.v7 for backward compatability.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.