Как изменить цвет фона ActionBar ActionBarActivity с помощью XML?

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

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

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

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

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

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

Как изменить цвет фона ActionBar объекта ActionBarActivity с помощью XML?


person user77115    schedule 06.11.2011    source источник
comment
Закрываю этот старый каштан. По многочисленным просьбам указывает на Санниди, однако ответы на этот вопрос охватывают довольно много версий Android, и в моем контексте предложение Дэвида Миллерса использовать SherlockActionBar было наиболее актуальным.   -  person user77115    schedule 24.06.2013
comment
Небольшой лакомый кусочек для других: если вы сделаете первый элемент в XML-представлении тем же фоном, что и ActionBar (в нашем случае - белым), ActionBar станет серым.   -  person Joshua Pinter    schedule 31.12.2019
comment
Если подумать, TitleBar и ActionBar не предлагают ничего особенного. Они больше похожи на неприятность, особенно когда вы их не знаете. A. Лучшей альтернативой было бы скрыть их и создать собственную строку заголовка. Вы можете добавлять свои собственные виджеты с видами и чертежами. Поскольку в строке заголовка нет виджетов. А панель действий может иметь только один раскрывающийся список для всех элементов меню. Даже многие приложения отказались от панели действий в пользу собственной.   -  person    schedule 07.02.2020


Ответы (21)


Согласно документации: «Вы можете контролировать поведение и видимость действия. bar с 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» в качестве темы для приложения / действия.

person lupchiazoem    schedule 12.02.2012
comment
@AlexanderFragotsis использует <item name="android:textColor">@color/my_color</item>. - person lethargicpanda; 07.01.2013
comment
Тот же подход следует использовать, если вы используете библиотеку ActionBarCompat. Единственное отличие состоит в том, что вы должны изменить элемент actionBarStyle (без префикса android:), чтобы определить, как панель действий будет выглядеть на устройствах Android до версии 3.0. - person Alex Semeniuk; 14.11.2013
comment
Есть ли возможность вместо указания HEX-кода цвета ссылаться на @android:color или даже на пользовательский цвет, определенный в colors.xml? Я пробовал безуспешно. - person jmrodrigg; 31.07.2014
comment
@jmrodrigg используйте <item name="android:background">@color/black</item> - person offset; 19.11.2014
comment
Поведение панели действий можно изменить для api ‹11. см. stackoverflow.com/questions/8024706/ - person Apurva; 06.02.2015
comment
Можете ли вы помочь stackoverflow.com/questions/28609110/custom-theme-not -подача - person Sasha; 19.02.2015
comment
Я не могу изменить цвет текста панели действий с помощью ‹item name = android: textColor› @ color / my_color ‹/item› - person Shirish Herwade; 05.03.2015
comment
можно ли установить цвет непосредственно в MyTheme без создания дополнительного тега стиля? - person wutzebaer; 14.01.2016
comment
Это не сработало для меня с тегом android: background, но когда я оставил тег android и поставил просто ‹item name = background›, цвет изменился для всех платформ. - person stevyhacker; 28.01.2016
comment
У меня пара <item name="actionBarStyle"> и <item name="background"> работает. Я использую com.android.support:appcompat-v7:25.4.0. - person Evi Song; 01.05.2018
comment
Это работает, но теперь это меняет фон экрана моих настроек на тот же цвет - person August; 27.11.2020

Попробуй это

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
person coder_For_Life22    schedule 06.11.2011
comment
11-06 10:53: 16.985: E / AndroidRuntime (16956): java.lang.NoSuchMethodError: com.acme.myActivity.getActionBar - person user77115; 06.11.2011
comment
@ coder_For_Life22 знаете, как мне получить контекстную панель действий? - person Geeks On Hugs; 01.09.2012
comment
afaik, сама библиотека поддержки не имеет ActionBar, для этого вам нужно будет включить SherlockActionBar. - person David Miler; 02.10.2012
comment
может быть, это странно, но в моем случае bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE)); измените цвет панели действий на серый. Это также происходит, если поставить другой цвет, например Color.RED, Color.GREEN и так далее ... Есть ли у кого-нибудь такая же проблема или известна ли причина этой проблемы? Я использую устройство Nexus S - person AlexAndro; 16.10.2012
comment
Что, если я хочу выровнять текст по центру? <item name="android:textAlignment">??</item> у какого может быть атрибута ?? - person Mitesh Shah; 09.01.2014
comment
stackoverflow.com/a/17198657/1022454 Этот пост, похоже, решает проблему, когда цвет панели действий становится серым. - person Jonathon Fry; 30.01.2014
comment
чтобы добавить цвет Hex, просто используйте Color.parseColor (# 7bb42c). - person Kennedy Nyaga; 19.03.2014
comment
@KennyWest Пожалуйста, не редактируйте ответ с модификациями кода, это должны быть комментарии - person EdChum; 19.03.2014
comment
@KennyWest bar.setBackgroundDrawable (новый ColorDrawable (Color.GREEN)); NULLPOINTEREXCEPTION? - person Ruchir Baronia; 01.11.2015

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

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
person user2428604    schedule 23.06.2013
comment
Как это вписывается в остальной код? просто любопытно, где на самом деле добавить это - person JGallardo; 04.11.2014
comment
У меня точный вопрос как @JGallardo. Куда это добавить? Я пробовал это в onCreate, но он дал NullPointerException Правка: это код, который я добавил в restoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (новый ColorDrawable (Color.parseColor (# BMW4E2))); - person rockydgeekgod; 15.01.2015
comment
Добавьте его в метод onCreate вашей Activity. - person Ojonugwa Jude Ochalifu; 30.07.2015
comment
используйте getSupportActionBar () вместо getActionBar () - person Chanaka Fernando; 27.10.2017

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

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

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

Вот скриншот инструмента

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

person Mohammad Shabaz Moosa    schedule 28.01.2014
comment
как настроить приложение для использования файлов после того, как они будут добавлены в мое приложение? - person Mike; 16.02.2015
comment
В контексте приведенного выше снимка экрана (названный пример) после вставки сгенерированной папки res у вас должен быть новый стиль @ style / Theme.Example. В AndroidManifest.xml установите ‹application android: theme=@style/Theme.example›. Должно сработать :) - person Mohammad Shabaz Moosa; 17.02.2015
comment
устарело. к несчастью - person Liangjun; 23.12.2015

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

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

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

-Уоррен

person Warren    schedule 13.05.2013

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

Для справки см. официальную документацию 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, поэтому стилизация панели действий в xml возможна только для API‹ 11

person Community    schedule 08.01.2015
comment
Можете ли вы помочь stackoverflow.com/questions/28609110/custom-theme-not -подача - person Sasha; 19.02.2015
comment
Фрагмент не работает в моем приложении при использовании во фрагменте. Я изменил его на ActionBar bar = getActivity (). GetActionBar (); . При открытии фрагмента происходит сбой. - person Jose Manuel Abarca Rodríguez; 16.04.2015
comment
Обнаружил проблему, работает с: ActionBar actionBar = getSupportActionBar (); - person Jose Manuel Abarca Rodríguez; 16.04.2015

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

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

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

person CrazyMind    schedule 08.06.2016
comment
Было бы лучше использовать ресурсы для получения цвета, а не в виде текста. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black))); - person Dinesh; 29.09.2017

На устройствах 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

person John Ballinger    schedule 19.05.2014
comment
После бесчисленных часов попыток понять, что WTH ошибочен, этот ответ мне помог. - person Abdullah Umer; 11.06.2014

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

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
person SANAT    schedule 04.02.2015
comment
Мое приложение вылетает с этим ответом. Чтобы заставить его работать во фрагменте, я изменил его следующим образом: getActivity (). GetActionBar (). SetBackgroundDrawable (new ColorDrawable (getActivity (). GetResources (). GetColor (R.color.col_nar))); , также пробовал getActivity (). getActionBar (). setBackgroundDrawable (new ColorDrawable (getResources (). getColor (R.color.col_nar))); . Вылетает, как только фрагмент открывается. - person Jose Manuel Abarca Rodríguez; 16.04.2015
comment
Обнаружил проблему, работает с: ActionBar actionBar = getSupportActionBar (); - person Jose Manuel Abarca Rodríguez; 16.04.2015
comment
ответ за деятельность. Если вы хотите использовать его с фрагментом, вам нужно использовать getActivity (). GetActionBar () для фрагментов - person SANAT; 16.04.2015

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

<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>
person Android is everything for me    schedule 21.08.2014

Вот как вы можете изменить цвет панели действий.

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;


public class ActivityUtils {

public static void setActionBarColor(AppCompatActivity appCompatActivity, int colorId){
    ActionBar actionBar = appCompatActivity.getSupportActionBar();
    ColorDrawable colorDrawable = new ColorDrawable(getColor(appCompatActivity, colorId));
    actionBar.setBackgroundDrawable(colorDrawable);
}

public static final int getColor(Context context, int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 23) {
        return ContextCompat.getColor(context, id);
    } else {
        return context.getResources().getColor(id);
    }
}
}

Из вашего MainActivity.java измените цвет панели действий следующим образом

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);
person Siddarth Kanted    schedule 25.05.2017

Когда вы расширяете активность, используйте следующий код

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));

Когда вы расширяете AppCompatActivity, используйте следующий код

ActionBar actionbar = getSupportActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
person arlo shie    schedule 14.03.2018

Этот код может быть полезен

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- customize the color palette -->
    <item name="colorPrimary">@color/material_blue_500</item>
    <item name="colorPrimaryDark">@color/material_blue_700</item>
    <item name="colorAccent">@color/material_blue_500</item>
    <item name="colorControlNormal">@color/black</item>

</style>
<style name="CardViewStyle" parent="CardView.Light">
    <item name="android:state_pressed">@color/material_blue_700</item>
    <item name="android:state_focused">@color/material_blue_700</item>
    <!--<item name="android:background">?android:attr/selectableItemBackground</item>-->
</style>

person Qutbuddin Bohra    schedule 26.02.2015

Иногда этот параметр вызывает исключение NullPointerException

ActionBar actionbar = getActionBar(); actionbar.setBackgroundDrawable(new ColorDrawable("color"));

Но этот вариант у меня сработал. Так что вы можете попробовать это.

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

Счастливое кодирование

person Shahadat Hossain    schedule 04.02.2020

Если вы используете androidx AppCompact. Используйте приведенный ниже код.

androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable("Color"));
person Dinith Rukshan Kumara    schedule 15.02.2020

2021: Kotlin oneliner без устаревания:

supportActionBar?.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this,R.color.red)))

Просто поместите его в onCreate

person Merthan Erdem    schedule 15.04.2021

Используйте этот код .., чтобы изменить цвет фона панели действий. откройте "res / values ​​/ themes.xml" (если его нет, создайте) и добавьте

<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
       parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
 <!-- ActionBar styles -->
<style name="MyActionBar"
       parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@drawable/actionbar_background</item>
</style>

Note : this code works for android 3.0 and higher versions only

person Amey Bawiskar    schedule 29.09.2015

Это сработало для меня, для AppCompatActivity,

    <item name="actionBarStyle">@style/BlackActionBar</item>
</style>

<style name="BlackActionBar" parent="@style/Widget.AppCompat.ActionBar.Solid">
    <item name="background">@android:color/black</item>
    <item name="titleTextStyle">@style/BlackActionBarTitleTextStyle</item>
</style>

<style name="BlackActionBarTitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:fontFamily">@font/cinzel_decorative</item>
</style>
person Tejasvi Hegde    schedule 28.02.2019

Это очень просто для тех, кто использует API 21 или выше. Используйте этот код ниже.

для Dark ActionBar

<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="android:background">@color/colorDarkGrey</item>
</style>

for_LightActionBar

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.ActionBar">
    <item name="android:background">@color/colorDarkGrey</item>
</style>
person nirazverma    schedule 22.12.2019

Используйте это, это сработает.

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
person Pankaj Lilan    schedule 24.08.2016

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

файл color.xml:

<resources> <color name="TabColor">#11FF00</color> </resources>`
person Chandresh    schedule 30.12.2015