मैं XML के उपयोग से ActionBarActivity के ActionBar की पृष्ठभूमि का रंग कैसे बदल सकता हूँ?


277

विवरण:

मैं ActionBarActivity का विस्तार कर रहा हूं।
2011-11-06 तक ग्रहण और एसडीके पूरी तरह से खराब हो गए।

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

Android 2.3.3
अनुप्रयोग के साथ सैमसंग डिवाइस पर नियोजित किया गया हैandroid:theme="@android:style/Theme.Light"

समस्या: एप्लिकेशन हल्का है, लेकिन ActionBar ग्रे आइकनों के साथ नीला है, नीले रंग के पृष्ठभूमि के खिलाफ शायद ही दिखाई देता है। मैं यह भी चाहता हूं कि एक्शनबार हल्का हो, इसलिए वे ग्रे आइकन अधिक दिखाई देते हैं।

मैं शैलियों को संशोधित करने की कोशिश की है, लेकिन कोई फायदा नहीं हुआ।
मुझे शायद कुछ तुच्छ याद आ रही है।

मैं XML के उपयोग से ActionBarActivity के ActionBar की पृष्ठभूमि का रंग कैसे बदल सकता हूँ?


2
इस पुराने चेस्टनट को बंद करना। लोकप्रिय मांग के अनुसार, सन्निधि की ओर इशारा करते हैं, हालांकि इस सवाल का जवाब एंड्रॉइड के कुछ संस्करणों में है, और मेरे संदर्भ में डेविड मिलर्स ने शर्लकएशनबार का उपयोग करने का सुझाव सबसे अधिक प्रासंगिक था।
user77115

1
दूसरों के लिए थोड़ा टिडबिट: यदि आप अपने एक्सएमएल में पहला तत्व बनाते हैं, तो आपकी एक्शनबेर (हमारे मामले में, सफेद) के समान पृष्ठभूमि देखें, एक्शनबेर ग्रे हो जाता है।
जोशुआ पिंटर

जब आप इस बारे में सोचते हैं, तो टाइटलबार और एक्शनबार कुछ विशेष पेशकश नहीं करते हैं। वे एक उपद्रव की तरह अधिक हैं, खासकर जब आप उन्हें नहीं जानते। ए बेटर विकल्प उन्हें छिपाने के लिए और अपने खुद के शीर्षक बार डिजाइन करने के लिए होगा। आप अपने खुद के विजेट को व्यू और ड्रॉबल्स के साथ जोड़ सकते हैं। जैसा कि टाइटल बार कोई विजेट प्रदान नहीं करता है। और एक्शन बार में केवल एक ड्रॉप डाउन सूची हो सकती है, सभी मेनू के लिए। एप्स के अधिकांश लोगों ने एक्शन बार को अपने पक्ष में ले लिया है।

जवाबों:


523

प्रलेखन के अनुसार - "आप एक्शनबार एपीआई के साथ एक्शन बार के व्यवहार और दृश्यता को नियंत्रित कर सकते हैं, जिसे एंड्रॉइड 3.0 (एपीआई स्तर 11) में जोड़ा गया था।"

तो, ActionBar आपके लक्षित वातावरण के लिए काम नहीं करेगा जो API स्तर 10 (Android 2.3.3) पर है।

यदि आप न्यूनतम एपीआई स्तर 11 के लिए लक्ष्य रखते हैं, तो आप कस्टम स्टाइल को परिभाषित करके एक्शनबार की पृष्ठभूमि का रंग बदल सकते हैं:

<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" सेट करें।


12
@AlexanderFragotsis का उपयोग करें <item name="android:textColor">@color/my_color</item>
lethargicpanda

28
यदि आप ActionBarCompat लाइब्रेरी का उपयोग कर रहे हैं, तो उसी दृष्टिकोण का उपयोग किया जाना चाहिए। फर्क सिर्फ इतना है कि आपको एक्शनबार बदलना चाहिए ( एंड्रॉइड के बिना : प्रीफ़िक्स) आइटम यह परिभाषित करने के लिए कि एक्शनबार प्री-3.0 एंड्रॉइड डिवाइस पर कैसे दिखाई देगा
एलेक्स

3
क्या रंग के एचईएक्स कोड को डालने के बजाय, @android:colorया यहां तक ​​कि एक कस्टम रंग को संदर्भित करने की कोई संभावना है colors.xml? मैंने बिना किसी सफलता के इसे आजमाया है।
जमरोड्रिग्ग

1
मैं "<item name =" android: textColor "> @ color / my_color </ item>" का उपयोग करके टेक्स्ट एक्शन बार टेक्स्ट का रंग बदलने में सक्षम नहीं हूं
शिरीष हेरवाडे

2
यह मेरे लिए एंड्रॉइड के साथ काम नहीं करता था: बैकग्राउंड टैग लेकिन जब मैंने एंड्रॉइड टैग को छोड़ दिया और सभी प्लेटफार्मों के लिए रंग बदल दिया तो बस <आइटम का नाम = "पृष्ठभूमि"> डाल दिया।
स्टीवेकर

209

इसे इस्तेमाल करे

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
user115115

1
@ coder_For_Life22 क्या आप जानते हैं कि मुझे एक प्रासंगिक एक्शन बार कैसे मिल सकता है?
गीक्स ऑन हग्स

5
afaik, समर्थन लाइब्रेरी में ActionBar ही नहीं है, इसके लिए आपको शर्लकअशनबार को शामिल करना होगा।
डेविड मिलर

22
शायद यह अजीब है लेकिन मेरे मामले bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));में एक्शन बार का रंग बदलकर ग्रे हो गया है। ये तब भी होता है जब अन्य रंग, जैसे Color.RED, Color.GREENऔर जैसे ... किसी को भी एक ही समस्या है, या इस मुद्दे का कारण पता है? मैं
AlexAndro

4
stackoverflow.com/a/17198657/1022454 एक्शन बार का रंग ग्रे हो जाता है।
जोनाथन फ्राई

124

इसे इस्तेमाल करे:

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

1
यह बाकी कोड में कैसे फिट होता है? बस जिज्ञासु जहां वास्तव में इसे जोड़ने के लिए
जेगलार्डो

7
मेरे पास @JGallardo जैसा सटीक सवाल है। आप इसे कहाँ जोड़ते हैं? मैंने इसे आज़माया, onCreateलेकिन इसने एक NullPointerException संपादन दिया : यह वह कोड है जिसे मैंने restoreActionBar ActionBar actionBar = getSupportActionBar () में जोड़ा है ; ActionBar.setBackgroundDrawable (नया ColorDrawable (Color.parseColor ("# E5E4E2"));
रॉकडेजेकेगॉड

इसे अपनी गतिविधि के ऑनक्रिट विधि में जोड़ें।
ओजोनुगवा जूड ओचलिफु

3
getSupportActionBar का उपयोग करें () getActionBar का इंस्टालेशन ()
चनाका फर्नांडो

69

इसका उपयोग करें - http://jgilfelt.github.io/android-actionbarstylegenerator/

इसका एक अद्भुत उपकरण जो आपको अपने एक्शनबार को लाइव पूर्वावलोकन के साथ अनुकूलित करने देता है।

मैंने पहले के जवाबों की कोशिश की, लेकिन हमेशा अन्य रंगों जैसे कि टैब और अक्षरों को बदलने में परेशानी होती थी और सामान को टालने में घंटों का समय लगता था। इस उपकरण ने मुझे कुछ ही मिनटों में अपना डिजाइन तैयार करने में मदद की।

यहाँ टूल का स्क्रीनशॉट है

शुभकामनाएं! :)


एक बार मेरे ऐप में जुड़ जाने के बाद मैंने फ़ाइलों को उपयोग करने के लिए अपना ऐप कैसे सेट किया?
माइक

ऊपर दिए गए स्क्रीनशॉट के संदर्भ में (उदाहरण के लिए नाम), उत्पन्न Res फ़ोल्डर को चिपकाने के बाद, आपके पास एक नई शैली @ शैली / थीम .Example होना चाहिए। AndroidManifest.xml में, सेट करें <application android: theme = "@ style / Theme.example">। काम करना चाहिए :)
मोहम्मद शाज़ा मोजो

1
पदावनत। दुर्भाग्य से
लियांगजुन

55

मुझे भी यही समस्या थी, जब मैंने उस कोड को दर्ज किया तो मेरा एक्शन बार ग्रे हो जाएगा। संभावना है कि आपकी मूल शैली शीट इस तरह दिखे:

<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

एक्शनबार के व्यवहार को एपीआई <11 में भी बदला जा सकता है

संदर्भ के लिए Android आधिकारिक दस्तावेज़ देखें

मैं एक ऐप बना रहा हूं minSdkVersion = "9"और targetSdkVersion = "21"मैंने एक्शन बार का रंग बदल दिया है और यह एपीआई स्तर 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")));

लेकिन यह एपीआई <11 के साथ काम नहीं करेगा , इसलिए एक्शनबार को स्टाइल करना एपीआई <11 के लिए एकमात्र तरीका हैxml



टुकड़ा में इस्तेमाल होने पर स्निपेट मेरे ऐप में काम नहीं करता है। मैंने इसे ActionBar बार = getActivity () के लिए बदल दिया। getActionBar (); । जैसे ही टुकड़ा खोला जा रहा है यह दुर्घटनाग्रस्त हो गया।
जोस मैनुअल अबरका रोड्रिगेज

1
समस्या मिली, इसके साथ काम करता है: ActionBar actionBar = getSupportActionBar ();
जोस मैनुअल अबर्का रॉड्रिग्ज

20

डायरेक्ट इस लाइन को अपने कलर कोड के साथ जोड़ें

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

हर बार ActionBar ऑब्जेक्ट बनाने की आवश्यकता नहीं है ...


1
रंग को पाठ के रूप में प्राप्त करने के बजाय संसाधनों का उपयोग करना बेहतर होगा। getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
दिनेश

15

नेक्सस 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


2
WTH का पता लगाने के लिए अनगिनत घंटे बिताने के बाद गलत था, इस जवाब से मुझे मदद मिली।
अब्दुल्लाह उमर

13

एक पंक्ति कोड आज़माएं:

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

1
इस जवाब से मेरा ऐप क्रैश हो गया। इसे एक खंड में काम करने के लिए मैंने इसे इस तरह बदल दिया: getActivity ()। GetActionBar ()। , भी getActivity () की कोशिश की। getActionBar ()। । टुकड़ा खुलते ही यह दुर्घटनाग्रस्त हो जाता है।
जोस मैनुअल अबर्का रॉड्रिग्ज

1
समस्या मिली, इसके साथ काम करता है: ActionBar actionBar = getSupportActionBar ();
जोस मैनुअल अबर्का रॉड्रिग्ज

1
जवाब गतिविधि के लिए है। आप टुकड़ा के साथ इसका उपयोग करना चाहते हैं तो आप getActivity () का उपयोग करने के लिए है getActionBar () टुकड़े के लिए।
सनत

7

एक्शन टेक्स्ट और एक्शनबार बैकग्राउंड को अलग-अलग रंग प्रदान करने के लिए नीचे दिए गए कोड का उपयोग करें। जिस विषय में आप आउटपुट चाहते हैं, उस गतिविधि के विरूद्ध नीचे थीम का उपयोग करें :)

<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

यह आप एक्शन बार का रंग बदल सकते हैं।

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

5

जब आप कोड के बाद गतिविधि का उपयोग कर रहे हैं

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

जब आप AppCompatActivity का विस्तार कर रहे हैं तो कोड का उपयोग करें

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

2

यह कोड मददगार हो सकता है

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

इस कोड का उपयोग करें .. एक्शन बार बैकग्राउंड कलर को बदलें। "Res / मान / 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>

नोट: यह कोड केवल एंड्रॉइड 3.0 और उच्चतर संस्करणों के लिए काम करता है


1

इसने मेरे लिए काम किया, 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>

1

यह उन लोगों के लिए बहुत सरल है जो एपीआई 21 या अधिक का उपयोग कर रहे हैं नीचे इस कोड का उपयोग करें

डार्क एक्शनबार के लिए

<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

यह प्रयोग करें, यह काम करेगा।

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

0

कभी-कभी यह विकल्प NullPointerException को फेंकता है

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

लेकिन यह विकल्प मेरे लिए काम कर रहा है। तो आप यह कोशिश कर सकते हैं।

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

हैप्पी कोडिंग


0

यदि आप androidx AppCompact का उपयोग कर रहे हैं। नीचे दिए गए कोड का उपयोग करें।

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

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

color.xml फ़ाइल:

<resources> <color name="TabColor">#11FF00</color> </resources>`
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.