Фоновое изображение панели действий

Я унаследовал тему Holo Light и настроил фон панели действий следующим образом:

Содержимое стилей.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>

Содержимое файла 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" />

Вместо того, чтобы повторяться, изображение растягивается, есть идеи, почему android:tileMode="repeat" не применяется?

заранее спасибо


person rnoway    schedule 02.05.2011    source источник


Ответы (4)


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

Приведенный выше код устанавливает фоновое изображение для панели действий.
Надеюсь, это поможет.

person Raj Trivedi    schedule 07.12.2012
comment
но почему он не поддерживает версию ниже, например 2.2, 2.3.3 и т. д. - person prabu; 22.05.2014

Хорошо, спасибо Romain Guy на IRC-канале #android-dev, это известная ошибка в Honeycomb/Android 3.0, которая будет исправлена ​​в следующем выпуске. С тех пор единственное решение — сделать это из кода, и оно работает :-)

 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);
person rnoway    schedule 03.05.2011
comment
Могу я спросить, как вы это сделали из кода? Как настроить повтор tileMode? Я всегда получал ноль, когда пытался получить панель действий - person Alex; 12.05.2011
comment
Я сделал это так: final ActionBar actionBar = getActionBar(); Фон BitmapDrawable = новый BitmapDrawable (BitmapFactory.decodeResource (getResources (), R.raw.actionbar_background)); background.setTileModeX(android.graphics.Shader.TileMode.REPEAT); actionBar.setBackgroundDrawable (фон); - person rnoway; 13.05.2011
comment
@rnoway, было бы лучше добавить свой комментарий в качестве редактирования в свой ответ. Вы должны пометить ответ как решение, потому что это устраняет проблему. - person Mario Kutlev; 22.06.2013
comment
Для меня это работает, если я вызываю invalidateMenuOptions после setBackgroundDrawable, не делая никаких предположений о типе Drawable - person gunar; 14.08.2013
comment
@rnoway: Почему вы определили свойство actionBar final? Как определение его окончательного влияет на это? Извините, я новичок в Java и Android. Спасибо - person Mustafa Chelik; 04.12.2014

Вы можете легко сделать это. Если вы хотите изменить фоновое изображение панели действий, поместите этот код в файл res/styles.xml.

 <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>

Для этого вам нужно выбрать изображение из папки «drawable». Здесь я выбираю изображение "tp_black_bg.png"

После этого не забудьте объявить эту тему в файле AndroidManifest.xml.

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

Теперь вы можете повторно открыть любой файл макета XML, вы можете легко увидеть эффект. Таким же образом вы можете изменить цвет фона панели действий.

Спасибо.

person Satyaki Mukherjee    schedule 31.12.2013

Используйте getSupportActionBar() из android.support.v7 для обратной совместимости.

person Ron    schedule 23.01.2015