Jak zmienić kolor tła ActionBar ActionBarActivity za pomocą XML?

277

Detale:

Rozszerzam ActionBarActivity.
Eclipse i SDK w pełni załatane od 2011-11-06.

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

Wdrożony na urządzeniu Samsung z Androidem 2.3.3
Aplikacja maandroid:theme="@android:style/Theme.Light"

Problem: aplikacja jest jasna, ale ActionBar jest niebieski z szarymi ikonami, ledwo widocznymi na niebieskim tle. Chcę również, aby pasek Actionbar był jasny, aby szare ikony były bardziej widoczne.

Próbowałem modyfikować style, ale bezskutecznie.
Prawdopodobnie brakuje mi czegoś trywialnego.

Jak zmienić kolor tła ActionBar ActionBarActivity za pomocą XML?

użytkownik77115
źródło
2
Zamykanie tego starego kasztana. Wskazuje na Sannidhi, według powszechnego zapotrzebowania, jednak odpowiedzi na to pytanie obejmują kilka wersji Androida, aw moim kontekście David Millers sugerował użycie SherlockActionBar.
user77115
1
Mały smakołyk dla innych: jeśli sprawisz, że pierwszy element w widoku XML będzie miał to samo tło co pasek ActionBar (w naszym przypadku biały), pasek ActionBar zmieni kolor na szary.
Joshua Pinter,
Gdy się nad tym zastanowić, TitleBar i ActionBar nie oferują nic specjalnego. Są bardziej uciążliwe, zwłaszcza gdy ich nie znasz. Lepszą alternatywą byłoby ich ukrycie i zaprojektowanie własnego paska tytułu. Możesz dodawać własne widżety za pomocą widoków i rysunków. Ponieważ pasek tytułu nie zawiera widżetów. Pasek akcji może mieć tylko jedną listę rozwijaną dla wszystkich elementów menu. Nawet wiele aplikacji zrzuciło pasek akcji na korzyść własnych.

Odpowiedzi:

523

Zgodnie z dokumentacją - „Możesz kontrolować zachowanie i widoczność paska akcji za pomocą interfejsów API ActionBar, które zostały dodane do Androida 3.0 (API poziom 11)”.

Dlatego ActionBar nie będzie działał w środowisku docelowym na poziomie API 10 (Android 2.3.3).

Na wszelki wypadek, jeśli celujesz na minimalny poziom API 11, możesz zmienić kolor tła ActionBar poprzez zdefiniowanie własnego stylu, jako:

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

I ustaw „MyTheme” jako motyw dla aplikacji / aktywności.

lupchiazoem
źródło
12
@AlexanderFragotsis use <item name="android:textColor">@color/my_color</item>.
lethargicpanda
28
To samo podejście należy zastosować w przypadku korzystania z biblioteki ActionBarCompat. Jedyną różnicą jest to, że należy zmienić element actionBarStyle (bez Androida: prefiks), aby zdefiniować, jak pasek działań będzie wyglądał na urządzeniach z Androidem starszym niż 3.0
Alex Semeniuk,
3
Czy istnieje możliwość zamiast zamiast kodu HEX koloru odwoływać się @android:colordo zdefiniowanego w nim koloru niestandardowego colors.xml? Próbowałem bezskutecznie.
jmrodrigg
1
Nie jestem w stanie zmienić koloru tekstu paska akcji za pomocą „<item name =" android: textColor ”> @ color / my_color </item>”
Shirish Herwade
2
Nie działało to dla mnie z Androidem: znacznik tła, ale kiedy pominąłem znacznik Androida i wstawiłem tylko <item name = "background"> ​​kolor zmienił się na wszystkich platformach.
stevyhacker
209

Spróbuj tego

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
coder_For_Life22
źródło
1
11-06 10: 53: 16.985: E / AndroidRuntime (16956): java.lang.NoSuchMethodError: com.acme.myActivity.getActionBar
user77115 6.11.11
1
@ coder_For_Life22 czy wiesz, jak mogę uzyskać kontekstowy pasek akcji?
Geeks On Hugs
5
afaik, sama biblioteka wsparcia nie ma ActionBar, do tego będziesz musiał dołączyć SherlockActionBar.
David Miler
22
może to dziwne, ale w moim przypadku bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));zmień kolor paska akcji na szary. Są także dzieje się, jeśli umieścić inny kolor, jak Color.RED, Color.GREENi tak dalej ... Czy ktoś ma ten sam problem, lub zna przyczynę tego problemu? Używam urządzenia Nexus S
AlexAndro
4
stackoverflow.com/a/17198657/1022454 Ten post wydaje się naprawiać problem polegający na tym, że kolor paska akcji staje się szary.
Jonathon Fry
124

Spróbuj tego:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
użytkownik2428604
źródło
1
Jak to pasuje do reszty kodu? Ciekawe, gdzie to dodać
JGallardo,
7
Mam dokładne pytanie jako @JGallardo. Gdzie to dodajesz? Wypróbowałem to, onCreateale dało NullPointerException Edycja: to jest kod, który dodałem do restoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (nowy ColorDrawable (Color.parseColor („# E5E4E2”)));
rockydgeekgod
Dodaj go do metody onCreate swojej aktywności.
Ojonugwa Jude Ochalifu
3
użyj getSupportActionBar () zamiast getActionBar ()
Chanaka Fernando
69

Użyj tego - http://jgilfelt.github.io/android-actionbarstylegenerator/

To niesamowite narzędzie, które pozwala dostosować pasek akcji za pomocą podglądu na żywo.

Próbowałem wcześniejszych odpowiedzi, ale zawsze miałem problemy ze zmianą innych kolorów, takich jak zakładki i litery, i spędziłem godziny na ulepszaniu. To narzędzie pomogło mi wykonać projekt w zaledwie kilka minut.

Oto zrzut ekranu narzędzia

Wszystkiego najlepszego! :)

Mohammad Shabaz Moosa
źródło
Jak ustawić aplikację tak, aby korzystała z plików po ich dodaniu do mojej aplikacji?
Mike
W kontekście powyższego zrzutu ekranu (nazwany przykład) po wklejeniu wygenerowanego folderu res powinieneś mieć nowy styl @ style / Theme.Example. W AndroidManifest.xml ustaw <aplikacja android: theme = "@ style / Theme.example">. Powinien działać :)
Mohammad Shabaz Moosa
1
przestarzałe. niestety
Liangjun
55

Miałem ten sam problem, gdy pasek akcji zmieniał kolor na szary, gdy wprowadzałem ten kod. Możliwe, że twój oryginalny arkusz stylów wyglądał tak:

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

„DarkActionBar” utrzymywał szary pasek akcji. Zmieniłem to na to i zadziałało:

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

Wrzuciłem również sposób edycji koloru tekstu. Ponadto nie trzeba zmieniać niczego wokół zasobów.

-Królikarnia

Królikarnia
źródło
38

Zachowanie paska akcji można również zmienić w interfejsach API <11

Zobacz oficjalną dokumentację Androida odsyłające

Tworzę aplikację minSdkVersion = "9"i targetSdkVersion = "21"zmieniłem kolor paska akcji i to działa dobrze z API poziomu 9

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

i ustaw żądany kolor paska akcji

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>

Kolor paska akcji można również zdefiniować w .classpliku, fragment to

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

ale to nie będzie działać z API <11 , więc stylizowanie paska akcji xmljest tylko sposobem dla API <11

Apurva
źródło
Fragment nie działa w mojej aplikacji, gdy jest używany we fragmencie. Zmieniłem to dla ActionBar bar = getActivity (). GetActionBar (); . Gdy tylko fragment ma zostać otwarty, ulega awarii.
Jose Manuel Abarca Rodríguez
1
Znalazłem problem, działa z: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
20

Bezpośrednio dodaj tę linię ze swoim kodem koloru

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

nie trzeba tworzyć obiektu ActionBar za każdym razem ...

Szalony umysł
źródło
1
Lepiej byłoby użyć zasobów, aby uzyskać kolor, niż mieć go jako tekst. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh
15

Na Nexusie 4 wydaje się, że kolor robi się szary.

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

(wszystkie podziękowania dla tego postu, ale jest on zakopany w komentarzach, więc chciałem go znaleźć tutaj) https://stackoverflow.com/a/17198657/1022454

John Ballinger
źródło
2
Ta odpowiedź pomogła mi po spędzeniu niezliczonych godzin na ustaleniu, że WTH jest błędne.
Abdullah Umer
13

wypróbuj jeden kod linii:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
SANAT
źródło
1
Moja aplikacja ulega awarii przy tej odpowiedzi. Aby działał we fragmencie, zmieniłem go w następujący sposób: getActivity (). GetActionBar (). SetBackgroundDrawable (new ColorDrawable (getActivity (). GetResources (). GetColor (R.color.col_nar))); , również próbował getActivity (). getActionBar (). setBackgroundDrawable (nowy ColorDrawable (getResources (). getColor (R.color.col_nar))); . Awaria następuje po otwarciu fragmentu.
Jose Manuel Abarca Rodríguez
1
Znalazłem problem, działa z: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
1
odpowiedź dotyczy działania. Jeśli chcesz użyć go z fragmentem, musisz użyć getActivity (). GetActionBar () dla fragmentów
SANAT 16.04.15
7

Użyj poniższego kodu, aby podać inny kolor niż tekst paska akcji i tło paska akcji, po prostu użyj poniżej motywu manifestu przeciwko aktywności, w której chcesz wydrukować :)

<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>
Android jest dla mnie wszystkim
źródło
5

W ten sposób możesz zmienić kolor paska akcji.

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);
    }
}
}

W MainActivity.java zmień kolor paska akcji w ten sposób

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);
Siddarth Kanted
źródło
5

Gdy rozszerzasz działalność, użyj następującego kodu

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

W przypadku rozszerzania funkcji AppCompatActivity użyj następującego kodu

ActionBar actionbar = getSupportActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
Arlo Shie
źródło
2

Ten kod może być pomocny

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

Qutbuddin Bohra
źródło
1

Użyj tego kodu ... aby zmienić kolor tła paska akcji. otwórz „res / wartości / themes.xml” (jeśli nie jest obecny, utwórz go) i dodaj

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

Uwaga: ten kod działa tylko dla Androida 3.0 i wyższych wersji

Amey Bawiskar
źródło
1

To zadziałało dla mnie, dla 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>
Tejasvi Hegde
źródło
1

Jest to bardzo proste dla tych, którzy używają API 21 lub nowszego Użyj tego kodu poniżej

dla 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>
nirazverma
źródło
0

Użyj tego, to zadziała.

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
Pankaj Lilan
źródło
0

Czasami ta opcja zgłasza wyjątek NullPointerException

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

Ale ta opcja działa dla mnie. Możesz więc spróbować.

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

Happy Coding

Shahadat Hossain
źródło
0

Jeśli używasz aplikacji Androidx AppCompact. Użyj poniższego kodu.

androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable("Color"));
DINITH RUKSHAN KUMARA
źródło
-2
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

plik color.xml:

<resources> <color name="TabColor">#11FF00</color> </resources>`
Chandresh
źródło