Last Updated: February 25, 2016
·
3.995K
· nrike

Cómo implementar una imágen de fondo en Android ActionBar

Para personalizar el fondo del elemento ActionBar en API level 11 AKA HoneyComb, típicamente definimos un estilo en el archivo styles.xml:

<style name="ActionBar"        parent="android:style/Widget.Holo.Light.ActionBar">
    <item name="android:background">@drawable/actionbar_background</item>
    <item name="android:textColor">@color/actionbar_text</item>
    <item name="android:titleTextStyle">@style/ActionBarText</item>
</style>

Y el contenido de recurso XML es:

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

Donde la imágen que queremos repetir es esta:

Picture

Sin embargo,hay un bug que no reconoce la propiedad tileMode al utilizar el parámetro repeat. Ésta propiedad permite decirle a un patrón de imágen llene programáticamente el objeto ActionBar con nuestro recurso, desafortunadamente lo que hace en vez es tomar la imágen como fondo y estirarla en width y height:

Picture

Para resolver esto, recomiendo crear un objeto que herede de BitmapDrawable para asignar el patrón de la imágen, posteriormente definimos la conducta del BitmapDrawable, solicitando que se repita en su eje X, para finalmente asignarlo al objeto ActionBar:

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

El resultado final se puede visualizar en la siguiente imágen:

Picture