ActionBar background image
Solution 1
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.
Solution 2
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);
Solution 3
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.
Solution 4
mActionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.navbar));
Solution 5
Use getSupportActionBar() from android.support.v7 for backward compatability.
Related videos on Youtube
rnoway
Updated on January 13, 2020Comments
-
rnoway over 4 years
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
-
Alex about 13 yearsMay 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
-
rnoway about 13 yearsI'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);
-
Mario Kutlev almost 11 years@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.
-
gunar almost 11 yearsFor me it works if I call
invalidateMenuOptions
aftersetBackgroundDrawable
without making any assumptions about the type ofDrawable
-
prabu almost 10 yearsbut why its not supporting below version like 2.2, 2.3.3, and so on
-
Mustafa Chelik over 9 years@rnoway: Why did you define actionBar property final? How defining it final affects it? Sorry i'm new to Java and Android. Thanks