Как изменить цвет фона ActionBar ActionBarActivity с использованием XML? - PullRequest
263 голосов
/ 06 ноября 2011

Подробности:

Я расширяю ActionBarActivity.
Eclipse и SDK полностью исправлены по состоянию на 2011-11-06.

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" />  

Развернуто на устройстве Samsung с Android 2.3.3
Приложение имеет android:theme="@android:style/Theme.Light"

Проблема: приложение светло, но ActionBar - синий с серымзначки, едва различимые на синем фоне.Я также хочу, чтобы панель ActionBar была светлой, чтобы их серые значки были более заметными.

Я пытался изменить стили, но безрезультатно.
Возможно, мне не хватает чего-то тривиального.

Как изменить цвет фона панели действий ActionBarActivity с использованием XML?

Ответы [ 17 ]

506 голосов
/ 12 февраля 2012

Согласно документации - "Вы можете контролировать поведение и видимость панели действий с помощью API-интерфейсов ActionBar, которые были добавлены в Android 3.0 (уровень API 11)."

ИтакActionBar не будет работать для вашей целевой среды, которая находится на уровне API 10 (Android 2.3.3).

На всякий случай, если вы настроены на минимальный уровень API 11, вы можете изменить цвет фона ActionBar, задав пользовательскийстиль, как:

<resources>
    <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">ANY_HEX_COLOR_CODE</item>
    </style>
</resources>

И, установите «MyTheme» в качестве темы для приложения / деятельности.

201 голосов
/ 06 ноября 2011

Попробуйте это

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
119 голосов
/ 23 июня 2013

попробуйте это:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
69 голосов
/ 29 января 2014

Используйте это - http://jgilfelt.github.io/android-actionbarstylegenerator/

Это удивительный инструмент, который позволяет настроить панель действий с предварительным просмотром в реальном времени.

Я пробовал предыдущие ответы, но у меня всегда были проблемы с изменением других цветов, таких как вкладки и буквы, и я часами настраивал материал. Этот инструмент помог мне сделать дизайн всего за пару минут.

Here's a screenshot of the tool

Всего наилучшего! :)

55 голосов
/ 13 мая 2013

У меня была такая же проблема, когда моя панель действий становилась серой, когда я вводил этот код.Скорее всего, ваша оригинальная таблица стилей выглядела так:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- API 14 theme customizations can go here. -->
</style>

"DarkActionBar" был тем, что сохраняло вашу панель действий серой.Я изменил это на это, и это сработало:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    <!-- API 14 theme customizations can go here. -->
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:background">#2aa4cd</item>
    <item name="android:titleTextStyle">@style/Theme.MyAppTheme.ActionBar.TitleTextStyle</item>
</style>        

<style name="Theme.MyAppTheme.ActionBar.TitleTextStyle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">#FFFFFF</item>
</style>    

Я также добавил, как редактировать цвет текста.Кроме того, не нужно ничего менять вокруг ресурсов.

-Warren

38 голосов
/ 08 января 2015

Поведение панели действий также можно изменить в API <11 </strong>

См. Официальную документацию Android для справки

Я создаю приложение с minSdkVersion = "9" и targetSdkVersion = "21" Я изменил цвет панели действий, и он отлично работает с уровнем API 9

Вот XML

res/values/themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>

        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>

    <!-- ActionBar styles -->
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:background">@color/actionbar_background</item>

        <!-- Support library compatibility -->
        <item name="background">@color/actionbar_background</item>
    </style>
</resources>

и установите нужный цвет панели действий

res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="actionbar_background">#fff</color> //write the color you want here
</resources>

Цвет панели действий также можно определить в файле .classфрагмент кода

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));

, но этот не будет работать с API <11 </strong>, поэтому стилизация панели действий в xml является единственным способом для API <11 </p>

19 голосов
/ 08 июня 2016

Напрямую добавьте эту строку с вашим цветовым кодом

getSupportActionBar().setBackgroundDrawable(
    new ColorDrawable(Color.parseColor("#5e9c00")));

нет необходимости каждый раз создавать объект ActionBar ...

15 голосов
/ 19 мая 2014

На Nexus 4 человек кажется, что цвет становится серым.

ActionBar bar = getActionBar(); // or MainActivity.getInstance().getActionBar()
bar.setBackgroundDrawable(new ColorDrawable(0xff00DDED));
bar.setDisplayShowTitleEnabled(false);  // required to force redraw, without, gray color
bar.setDisplayShowTitleEnabled(true);

(все заслуги в этом посте, но он скрыт в комментариях, поэтому я хотел бы вспомнить его здесь) https://stackoverflow.com/a/17198657/1022454

13 голосов
/ 04 февраля 2015

попробуйте одну строку кода:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
7 голосов
/ 21 августа 2014

Используйте приведенный ниже код для предоставления другого цвета тексту панели действий и фону панели действий, просто используйте ниже тему в манифесте против действия, в котором вы хотите выводить:)

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

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:titleTextStyle">@style/TitleBarTextColor</item>
    <item name="android:background">YOUR_COLOR_CODE</item>
</style>

<style name="TitleBarTextColor" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">YOUR_COLOR_CODE</item>
</style>
...