2012-07-28 17 views
7

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

getActionBar(); 
ActionBar.setIcon(R.drawable.my_icon); 

"यहां कोई ऐसा संदर्भ उपलब्ध नहीं है" जो त्रुटि मुझे मिल रही है। यह सही तरीके से कैसे किया जाना चाहिए?

बीटीडब्ल्यू मेरा minSdkVersion 14 है इसलिए कोई एक्शन बार शेरलॉक सामान नहीं है।

उत्तर

18
getActionBar(); 

आप वहां कार्रवाई बार को फेंक रहे हैं। getActionBar()ActionBar का एक उदाहरण देता है, जिसे आपको setIcon() पर कॉल करने की आवश्यकता होती है। इस तरह:

ActionBar actionBar = getActionBar(); 
actionBar.setIcon(R.drawable.my_icon); 
+4

'setIcon' एपीआई स्तर 14 और उच्चतर में समर्थित है। आप यहां अभिव्यक्त फ़ाइल में एक्शनबार लोगो भी सेट कर सकते हैं जैसा कि यहां बताया गया है: http://stackoverflow.com/a/6351736/1182823 –

+0

यह समाधान समर्थित लाइब्रेरी v7 का उपयोग करते समय काम नहीं कर रहा है जहां मैं getSupportActionBar() का उपयोग करता हूं; - कोई उपाय? धन्यवाद –

0

आपको res/ के तहत अपने drawable/ फ़ोल्डर में संदर्भित करने की आवश्यकता है जिसे आप आकर्षित करना चाहते हैं।

संपादित करें: आपके एंड्रॉइड इंस्टॉलेशन फ़ोल्डर में उपयोग करने के लिए बहुत सारी स्टॉक छवियां हैं। आप शायद इसे वहां पा सकते हैं।

+0

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

0

मौजूदा उत्तर बहुत सही है। हालांकि, एक विकल्प भी है। एक न्यूनतम दृष्टिकोण

getActionBar().setIcon(R.drawable.my_icon);

अपने काम तुरंत हो जाता उपयोग करने के लिए किया जाएगा। :)

तकनीकी विवरण: चूंकि getActionBar() डिफ़ॉल्ट रूप से एक ऑब्जेक्ट देता है, तो आप इसे सीधे इन-स्कोप ऑब्जेक्ट में प्राप्त किए बिना इसे कुशल बना सकते हैं।

4

हालांकि इसका थोड़ा देर जवाब है, लेकिन मैंने सोचा कि यह उपयोगी हो सकता है।

एक गतिविधि के अंदर से : एपीआई स्तर 14 या के लिए उच्च: एक टुकड़ा अंदर से

getSupportActionBar().setIcon(R.drawable.my_icon); 

:

getActionBar().setIcon(R.drawable.my_icon); 

निम्नतर API स्तर के लिए हम ActionBarActivity विस्तार करने के लिए और उसके बाद है : एपीआई स्तर 14 या उच्चतर के लिए:

getActivity().getActionBar().setIcon(R.drawable.my_icon); 

निम्नतर API स्तर के लिए हम (गतिविधि ActionBarActivity का विस्तार करना होगा) का उपयोग कर सकते हैं:

((ActionBarActivity)getActivity()).getSupportActionBar().setIcon(R.drawable.my_icon); 

और दोनों ही मामलों हम चिह्न या लोगो सेट करने से पहले setDisplayShowHomeEnabled (सही) कॉल करनी होगी में।

((ActionBarActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true); 

((ActionBarActivity)getActivity()).getSupportActionBar().setIcon(R.drawable.my_icon); 
0

setIcon पर कॉल करना मेरे लिए पर्याप्त नहीं था।

इससे पहले, मैं गतिविधि आइकन को गतिविधि लोगो से प्रदर्शन स्विच करने के लिए किया था:

actionBar.setDisplayUseLogoEnabled(false); 

गतिविधि आइकन और लोगो के बीच मतभेद के लिए Android icon vs logo देखते हैं।

0

मैं इसका उपयोग अपने उपयोग के लिए कर रहा हूं, और यह मेरे लिए काम कर रहा है। इस मदद आशा है कि सब

actionBar.setDisplayHomeAsUpEnabled(true); 
actionBar.setHomeAsUpIndicator(R.drawable.icon); 
0

इस

setSupportActionBar(toolbar); 
    if (getSupportActionBar() != null) 
    getSupportActionBar().setIcon(R.drawable.your_icon); 
संबंधित मुद्दे