XML kullanarak ActionBarActivity'nin ActionBar öğesinin arka plan rengini nasıl değiştirebilirim?


277

Detaylar:

ActionBarActivity'yi genişletiyorum.
Eclipse ve SDK 2011-11-06 itibariyle tamamen yamalı.

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

Samsung 2.3.3 Android
uygulaması ile dağıtıldıandroid:theme="@android:style/Theme.Light"

Sorun: Uygulama açık, ancak ActionBar mavi arka plan rengine karşı neredeyse görünmeyen gri simgelerle mavi. Ayrıca ActionBar'ın açık olmasını istiyorum, böylece gri simgeler daha görünür.

Stilleri değiştirmeyi denedim ama boşuna.
Muhtemelen önemsiz bir şey eksik.

XML kullanarak bir ActionBarActivity öğesinin ActionBar öğesinin arka plan rengini nasıl değiştirebilirim?


2
Bu eski kestaneyi kapatıyorum. Sannidhi'yi popüler talep üzerine işaret ediyor, ancak bu soruya verilen cevaplar Android'in birkaç versiyonunu içeriyor ve bağlamımda David Millers SherlockActionBar'ı kullanma önerisi en alakalı.
user77115

1
Diğerleri için küçük bir tidbit: XML'nizdeki ilk öğeyi ActionBar'ınızla (arka planımızda beyaz) aynı arka planı görüntülerseniz, ActionBar gri olur.
Joshua Pinter

Düşündüğünüzde TitleBar ve ActionBar özel bir şey sunmuyor. Özellikle onları bilmediğinizde daha çok sıkıntı gibi. Daha iyi bir alternatif onları gizlemek ve kendi başlık çubuğunuzu tasarlamak olacaktır. Görünümler ve çizilebilir malzemeler ile kendi widget'larınızı ekleyebilirsiniz. Başlık çubuğu hiçbir widget sağlamaz gibi. Ve eylem çubuğunda tüm menü öğeleri için sadece bir açılır liste olabilir.Uygulamaların birçoğu bile Eylem Çubuğunu kendi lehine terk etti.

Yanıtlar:


523

Gereğince belgeleri - "Sen davranışları, Android 3.0 (API seviyesi 11) eklendi İşlem Çubuğu API'leri ile İşlem çubuğunun görünürlüğünü kontrol edebilirsiniz."

Bu nedenle, ActionBar API 10 düzeyinde (Android 2.3.3) hedef ortamınız için çalışmaz.

Minimum API düzey 11'i hedeflerseniz, özel stili şu şekilde tanımlayarak ActionBar'ın arka plan rengini değiştirebilirsiniz:

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

Ve "MyTheme" uygulamasını uygulama / etkinlik için tema olarak ayarlayın.


12
@AlexanderFragotsis kullanın <item name="android:textColor">@color/my_color</item>.
lethargicpanda

28
ActionBarCompat kitaplığını kullanıyorsanız aynı yaklaşım kullanılmalıdır. Tek fark, eylem çubuğunun 3.0 öncesi Android cihazlarda nasıl görüneceğini tanımlamak için actionBarStyle ( android olmadan : önek) öğesini değiştirmeniz gerektiğidir
Alex Semeniuk

3
Rengin HEX kodunu koymak yerine, @android:coloriçinde tanımlanan a veya hatta özel bir renge başvurma olasılığı var mı colors.xml? Başarısız denedim.
jmrodrigg

1
"<İtem name =" android: textColor "> @ color / my_color </item>" kullanarak metin eylem çubuğu metin rengini değiştiremiyorum
Shirish Herwade

2
Bu benim için android ile çalışmadı: arka plan etiketi ama android etiketini bırakıp sadece <item name = "background"> ​​koyduğumda tüm platformlar için renk değişti.
stevyhacker

209

Bunu dene

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));

1
11-06 10: 53: 16.985: E / AndroidRuntime (16956): java.lang.NoSuchMethodError: com.acme.myActivity.getActionBar
user77115 6:11

1
@ coder_For_Life22 Bağlamsal eylem çubuğunu nasıl alabilirim biliyor musunuz?
Geeks On Hugs

5
afaik, destek kitaplığının kendisi ActionBar'a sahip değildir, çünkü SherlockActionBar'ı dahil etmeniz gerekir.
David Miler

22
belki bu garip ama benim durumumda bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));eylem çubuğu rengini gri olarak değiştirin. Koymak diğer renk gibi, bunlar da olur Color.RED, Color.GREENvb ... mu kimse bu sorunun nedenini aynı sorun var, ya biliyor? Bir Nexus S cihazı kullanıyorum
AlexAndro

4
stackoverflow.com/a/17198657/1022454 Bu gönderi, işlem çubuğu renginin gri olduğu sorunu gideriyor gibi görünüyor.
Jonathon Fry

124

bunu dene:

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

1
Bu, kodun geri kalanına nasıl uyar? sadece bunu nereye ekleyeceğinizi merak ediyorum
JGallardo

7
@JGallardo diye bir sorum var. Bunu nereye ekliyorsunuz? Ben denedim onCreateama bir NullPointerException Düzenleme verdi : Bu restoreActionBar ActionBar için eklenen kod actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (yeni ColorDrawable (Color.parseColor ("# E5E4E2")));
rockydgeekgod

Etkinliğinizin onCreate yöntemini ekleyin.
Ojonugwa Jude Ochalifu

3
getActionBar () getSupportActionBar () instad kullan
Chanaka Fernando

69

Bunu kullanın - http://jgilfelt.github.io/android-actionbarstylegenerator/

Eylem çubuğunuzu canlı bir önizleme ile özelleştirmenizi sağlayan inanılmaz bir araçtır.

Daha önceki cevapları denedim ama her zaman sekmeler ve harfler gibi diğer renkleri değiştirmekle ilgili problemler yaşadım ve saatlerce ince ayar yaptım. Bu araç birkaç dakika içinde tasarımımı yapmama yardımcı oldu.

İşte aracın ekran görüntüsü

Herşey gönlünce olsun! :)


Uygulamamı, uygulamalarıma eklendikten sonra dosyaları kullanacak şekilde nasıl ayarlarım?
Mike

Yukarıdaki ekran görüntüsü bağlamında (adlandırılmış örnek), oluşturulan res klasörünü yapıştırdıktan sonra, yeni bir stile @ style / Theme.Example sahip olmalısınız. AndroidManifest.xml dosyasında <application android: theme = "@ style / Theme.example"> seçeneğini ayarlayın. Çalışmalı :)
Mohammad Shabaz Moosa

1
kullanımdan kaldırıldı. ne yazık ki
Liangjun

55

Aynı sorunu yaşadım, bu kod girildiğinde Eylem Çubuğum griye dönüyordu. Muhtemelen orijinal stil sayfanız şu şekilde görünüyordu:

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

"DarkActionBar", Action Bar'ınızı gri tutan şeydi. Bunu bu şekilde değiştirdim ve işe yaradı:

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

Metin renginin nasıl düzenleneceğine de değindim. Ayrıca, kaynakları çevreleyen hiçbir şeyi değiştirmeye gerek yok.

-Warren


38

Eylem Çubuğunun Davranışı API'larda da değiştirilebilir <11

Android Resmi Belgelerine bakınReferans

Bir uygulama oluşturuyorum minSdkVersion = "9"ve targetSdkVersion = "21"işlem çubuğunun rengini değiştirdim ve API seviye 9 ile iyi çalışıyor

İşte bir 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>

ve istediğiniz işlem çubuğunun rengini ayarlayın

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>

İşlem çubuğu rengi .classdosyada da tanımlanabilir , snippet

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

ancak bu , API <11 ile çalışmaz , bu nedenle eylem çubuğunu biçimlendirmek API <11 için yalnızca yoldurxml



Parçacık bir parçada kullanıldığında uygulamamda çalışmıyor. ActionBar için değiştirdim bar = getActivity (). GetActionBar (); . Parça açılmak üzere olur olmaz çöküyor.
Jose Manuel Abarca Rodríguez

1
Sorunu buldum, bununla çalışır: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez

20

Bu satırı renk kodunuzla doğrudan ekleyin

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

her seferinde ActionBar nesnesi oluşturmanıza gerek yok ...


1
Rengi elde etmek için kaynakları metin olarak kullanmak yerine kaynakları kullanmak daha iyi olurdu. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh

15

Nexus 4 insanlarında bu, rengin gri görünmesini sağlıyor.

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

(tüm bu gönderi için kredi, ama yorumlarda gömülü, bu yüzden burada göstermek istedim) https://stackoverflow.com/a/17198657/1022454


2
WTH'nin yanlış olduğunu anlamaya çalışmak için sayısız saat geçirdikten sonra bu cevap bana yardımcı oldu.
Abdullah Umer

13

bir satır kodu deneyin:

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

1
Uygulamam bu yanıtla kilitleniyor. Bir parçada çalışmasını sağlamak için şu şekilde değiştirdim: getActivity (). GetActionBar (). SetBackgroundDrawable (new ColorDrawable (getActivity (). GetResources (). GetColor (R.color.col_nar))); , ayrıca getActivity () denedi. getActionBar (). setBackgroundDrawable (new ColorDrawable (getResources (). getColor (R.color.col_nar))); . Parça açılır açılmaz çöküyor.
Jose Manuel Abarca Rodríguez

1
Sorunu buldum, bununla çalışır: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez

1
cevap etkinlik içindir. Parça ile kullanmak istiyorsanız, parçalar için getActivity (). GetActionBar () kullanmanız gerekir
SANAT

7

Actionbar metnine ve actionbar arka planına farklı renk sağlamak için aşağıdaki kodu kullanın, çıktı almak istediğiniz etkinliğe karşı manifestte aşağıdaki temayı kullanın :)

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

5

Eylem Çubuğunun rengini bu şekilde değiştirebilirsiniz.

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 öğenizden işlem çubuğu rengini şu şekilde değiştirin

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);

5

Etkinliği Uzatırken aşağıdaki Kodu kullanın

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

AppCompatActivity'yi Genişletirken aşağıdaki Kodu kullanın

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

2

Bu kod yardımcı olabilir

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


1

Eylem çubuğu arka plan rengini değiştirmek için Bu kodu .. kullanın. "res / değerleri / themes.xml" dosyasını açın (yoksa, oluşturun) ve ekleyin

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

Not: bu kod yalnızca android 3.0 ve daha yüksek sürümler için çalışır


1

Bu benim için çalıştı, AppCompatActivity için,

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

1

API 21 veya üstünü kullananlar için çok basit Aşağıdaki kodu kullanın

Dark ActionBar için

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

0

Bunu kullan, işe yarar.

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

0

Bazen bu seçenek NullPointerException özel durumunu oluşturur

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

Ama bu seçenek benim için işe yaradı. Yani bunu deneyebilirsiniz.

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

Mutlu Kodlama


0

Androidx AppCompact kullanıyorsanız. Aşağıdaki kodu kullanın.

androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable("Color"));

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

color.xml dosyası:

<resources> <color name="TabColor">#11FF00</color> </resources>`
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.