2012-03-29 4 views
37

में एक्शन बार शीर्षक रंग को कैसे बदला जाए, मुझे v11 और ऊपर के लिए प्रोग्रामेटिक रूप से एक्शन एंड्रॉइड एक्शन बार शीर्षक रंग बदलने में परेशानी हो रही है। मैं इसे एक्सएमएल में कर सकता हूं लेकिन कोड में गतिशील रूप से इसे बदलने की जरूरत है। मुझे इस बारे में कैसे बर्ताव करना चाहिए? अग्रिम में धन्यवाद।कोड

उत्तर

81

ActionBar शीर्षक आईडी छिपी हुई है, या दूसरे शब्दों में, यह आंतरिक है और इसे एक्सेस करना आम तौर पर नहीं किया जा सकता है। आप Resources.getIdentifier का उपयोग कर View.findViewById का उपयोग कर इसका संदर्भ दे सकते हैं।

ले लो action_bar_title

int titleId = getResources().getIdentifier("action_bar_title", "id", "android"); 

अब आप एक TextView

TextView abTitle = (TextView) findViewById(titleId); 
abTitle.setTextColor(colorId); 
+0

यह मेरे मोटो रेजर पर काम नहीं करता है। – antonio081014

+0

यह मेरे लिए काम नहीं कर रहा है:/ – Si8

+1

यह बात मेरे लिए काम नहीं करती है। सुनिश्चित करने के लिए, एक्शनबार में कोई स्थिर शीर्षक नहीं है, इसलिए मैं getIdentifier विधि कॉल के भीतर "action_bar_title" का उपयोग कर रहा हूं। "आईडी" और "एंड्रॉइड" के लिए भी चला जाता है। मैं v7-appcompat लाइब्रेरी का उपयोग कर रहा हूँ। – MSIslam

9

साथ आईडी का उपयोग कर सकते हैं, तो आप Sherlock Actionbar का उपयोग आप शर्लक-ActionBar-आईडी का उपयोग कर सकते के लिए आईडी समर्थित एक्शनबार के लिए (3.0 से नीचे एंड्रॉइड)

int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");  
if (0 == titleId) 
     titleId = com.actionbarsherlock.R.id.abs__action_bar_title; 
+1

बस ऐसा करें: getSherlockActivity()। GetSupportActionBar() प्राप्त करें। setTitle ("शीर्षक"); ?? – marchinram

+2

कारण आप ऐसा कर सकते हैं, जब आप केवल शीर्षक बदलना चाहते हैं। लेकिन यह सवाल शीर्षक-रंग बदलने वाला था। – salcosand

+0

इसलिए आपको एक्शनबार में टेक्स्टव्यू प्राप्त करने की आवश्यकता है और वहां पहुंचने के लिए आपको टेक्स्ट व्यू के लिए आईडी की आवश्यकता है। और आईडी शेरलॉक एक्शनबार और नेटिव में अलग है। – salcosand

24

एक और तरीका है एचटीएमएल

उपयोग कर रहा है
getSupportActionBar().setTitle((Html.fromHtml("<font color=\"#FF4444\">" + getString(R.string.some_string) + "</font>"))); 
+2

यह मेरी राय में सबसे बुलेट प्रूफ उत्तर है। – Ercan

+2

यह मेरे लिए इसे सेट करने का सबसे विश्वसनीय तरीका है। – DarkWolffe

60

आप शीर्षक

Spannable text = new SpannableString(actionBar.getTitle()); 
    text.setSpan(new ForegroundColorSpan(Color.BLUE), 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
    actionBar.setTitle(text); 
+11

यह एक स्वीकृत समाधान होना चाहिए, एक आंतरिक एपीआई (action_bar_title आईडी) पर भरोसा करना एक बुरा विचार है क्योंकि यह बिना किसी सूचना के बदल सकता है। – fernandohur

+1

यह सबसे अच्छा जवाब है। विशेष रूप से Kit7at पर v7 appcompat लाइब्रेरी का उपयोग करके action_bar_title आईडी समाधान पर विफल। इस जवाब का प्रयोग करें! – Codeversed

+0

एक आकर्षण की तरह काम करता है – Dien

10

के रंग सेट करने के हैं का उपयोग कर v7 appcompat library (R22 के साथ परीक्षण किया) तो आप कॉल कर सकते हैं एक SpannableString और ForegroundColorSpan उपयोग कर सकते हैं setTitleTextColor()Toolbar ऑब्जेक्ट पर जो सभी एपीआई स्तरों के लिए एक्शन बार को प्रतिस्थापित करता है। उदाहरण के लिए:

Toolbar actionBarToolbar = (Toolbar)activity.findViewById(R.id.action_bar); 
if (actionBarToolbar != null) 
    actionBarToolbar.setTitleTextColor(Color.RED); 
+0

जब लॉलीपॉप के लिए संकलित करने के लिए मेरे प्रोजेक्ट को अपग्रेड किया गया, तो यह उत्तर एकमात्र सही है (एडनील का उत्तर क्रैश) – Fraser

+1

मैं समर्थन लाइब्रेरी 21.0.3 का उपयोग कर रहा हूं और यह अब और काम नहीं कर रहा है, अगर मैंने स्पष्ट रूप से कोई त्रुटि नहीं की है। सबसे पहले इवानपी का समाधान काम कर रहा है। –

+0

@ ČikićNenad appcompat r22 के लिए फिक्स्ड (कम से कम, आर 21 के साथ भी काम करना चाहिए)। – matiash