Как да променя цвета на фона на 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
Затваряне на този стар кестен. Посочва Sannidhi, според масовото търсене, но отговорите на този въпрос обхващат доста версии на Android и в моя контекст предложението на Дейвид Милър за използване на SherlockActionBar беше най-подходящо.   -  person user77115    schedule 24.06.2013
comment
Малка хапка за другите: Ако направите първия елемент във вашия XML изглед със същия фон като вашия ActionBar (в нашия случай бял), ActionBar става сив.   -  person Joshua Pinter    schedule 31.12.2019
comment
Като се замислите, TitleBar и ActionBar не предлагат нищо специално. Те са по-скоро неприятни, особено когато не ги познавате. A.по-добра алтернатива би била да ги скриете и да проектирате своя собствена заглавна лента. Можете да добавите свои собствени джаджи с Views и drawables. Тъй като заглавната лента не предоставя джаджи. И лентата с действия може да има само един падащ списък за всички елементи от менюто. Дори много приложения са се отказали от лентата с действия в полза на своите собствени.   -  person    schedule 07.02.2020


Отговори (21)


Според документация - „Можете да контролирате поведението и видимостта на действието лента с 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 tag, но когато изпуснах 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
за да добавите шестнадесетичен цвят, просто използвайте 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(#E5E4E2))); - person rockydgeekgod; 15.01.2015
comment
Добавете го метода onCreate на вашата дейност. - 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 задайте ‹приложение 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“ беше това, което поддържаше вашата Action Bar сива. Промених го на това и проработи:

<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

Поведението на Actionbar също може да се промени в 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