2011-08-22 20 views
17

के साथ एक एक्शनबार मेनू आइटम आइकन को प्रतिस्थापित करना मैं हनीकॉम एक्शनबार में एक अनिश्चित प्रगति पट्टी जोड़ना चाहता हूं, ताकि जब भी उपयोगकर्ता "ताज़ा करें" दबाए, तो रीफ्रेश आइकन अस्थायी रूप से एक अनिश्चित प्रगति पट्टी में बदल जाता है, कार्य पूरा हो जाता है। ईमेल ऐप यह पहले से ही करता है, लेकिन मैं यह नहीं समझ सकता कि कैसे।एक अनिश्चित प्रगतिबार

कोई सलाह?

+0

संबंधित: http://stackoverflow.com/questions/9731602/animated-icon-for-actionitem – rds

उत्तर

5

यह बताएं कि ईमेल ऐप कैसे करता है, लेकिन आप setIcon पर setIcon को StateDrawable एक्सएमएल फ़ाइल की आईडी के साथ कॉल करना चाहते हैं, और फिर टाइमर का उपयोग करके बस राज्य को बदलें।

+1

आइकन स्थापित करें Actionbar खुद के लिए एक टैब चिह्न के लिए संभव ही नहीं है और नहीं। क्या यह एक्शन आइकॉन के लिए भी दुर्घटना से काम कर रहा है या क्या यह जवाब गलत है? – Janusz

4

यह पता चला है कि Google ने अपने व्यापक एक्शनबार कॉम्पैबिलिटी प्रोजेक्ट के हिस्से के रूप में इसे बिल्कुल करने का एक उदाहरण पोस्ट किया है। Have a look

+0

वह उदाहरण शो/छुपाएं का उपयोग करके आसन्न ताज़ा आइकन और अनिश्चित प्रगति के साथ एक सेट लेआउट पर निर्भर करता है। एक्शनबार में, हमारे पास वह लेआउट नहीं है और न ही पहुंच है। फेमी के विचार को आजमा रहे हैं ... – larham1

+0

यह पुराने उपकरणों पर शो/छुपा उपयोग करता है, हाँ; हालांकि, यदि आप एक्शनबैर हेल्परकोब/एक्शनबैर हेल्परिक्स कक्षाओं में देखते हैं, तो वे आईसीएस और हनीकॉम के लिए भी उचित/अद्यतन तरीका करते हैं। यह सभी उपकरणों पर काम करता है (मुझे पता है; मैं अपने स्वयं के ऐप में 2.1+, 3.x, और 4.x के लिए इसका लाभ उठा रहा हूं और यह उन सभी पर काम करता है, अनिश्चित प्रगति पट्टी शामिल है।) –

+0

लिंक अब टूटा हुआ है (Google ने यूआरएल को हटाने का फैसला किया? श्वास) – Adam

3

मैं मूल यहां समस्या के अधीन प्रदान की कोड का उपयोग कर रहा: https://github.com/JakeWharton/ActionBarSherlock/issues/425

android:layout_width और android:layout_height (actionbar_indeterminate_progress.xml में) मैं 32dp का उपयोग को छोड़कर; चूंकि यह एक्शनबार कॉम्पैप में किया गया था: http://developer.android.com/resources/samples/ActionBarCompat/res/layout-v11/actionbar_indeterminate_progress.html

17

जॉन ओ के उत्तर को स्पष्ट करने के लिए, कुंजी ताज़ा कार्रवाई पर एक क्रिया दृश्य सेट और सेट करना है। यह एक्शनबार शेरलॉक और देशी 4.x एक्शन बार दोनों में काम करता है। निम्नलिखित स्निपेट ताज़ा आइकन के शीर्ष पर प्रगति अनिश्चित दृश्य डाल देंगे, यह मानते हुए ताज़ा मेनू आइटम आईडी 'refresh_option' और प्रतिस्थापन लेआउट (जो एक ProgressBar है) है 'progress_wheel' लेआउट में है:

MenuItem item = abmenu.findItem(R.id.refresh_option); 
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View abprogress = inflater.inflate(R.layout.progress_wheel, null); 
item.setActionView(abprogress); 

अनसेट प्रगति देखने के लिए, और ताज़ा आइकन दृश्यता वापस आ जाएगी:

item.setActionView(null); 

GitHub पर a more detailed example देखें।

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_refresh: 
       item.setActionView(new ProgressBar(this)); 
       break; 
     } 
     return super.onOptionsItemSelected(item); 
+0

समस्या यह है: नई प्रगतिबार नियमित कार्रवाई आइटम से थोड़ा बड़ा है। इस प्रकार सभी पड़ोसी वस्तुएं पक्षों में थोड़ी सी चीजें दिखाई देती हैं (और गायब होने पर "जंब बैक")। इसे हल करने के बारे में कोई विचार? –

2

आप आसानी से यह कर सकते हैं : ताज़ा/ताज़ा के लिए

item.setActionView(R.layout.progress_bar); 
+0

समस्या यह है: नई प्रगतिबार नियमित कार्रवाई आइटम से थोड़ा बड़ा है। इस प्रकार सभी पड़ोसी वस्तुएं पक्षों में थोड़ी सी चीजें दिखाई देती हैं (और गायब होने पर "जंब बैक")। कोई विचार कैसे इस को हल किया जा सकता है? –

+0

मैंने '' 'प्रगतिबार xmlns: android =" http://schemas.android.com/apk/res/android " \t एंड्रॉइड: आईडी =" @ + आईडी/प्रगतिबार 2 " \t एंड्रॉइड के साथ एक लेआउट फ़ाइल बनाई है : layout_width = "match_parent" \t एंड्रॉयड: layout_height = "match_parent" \t एंड्रॉयड: गद्दी = "4dp" \t एंड्रॉयड: layout_gravity = "केन्द्र" \t /> '' '। यह मेनू वस्तुओं को स्थानांतरित करने से बचाता है। '' 'Item.setActionView (R.layout.your_layout) सेट करना याद रखें;' '' –

4

larham1's answer आसान बनाने के लिए: आप फिर भी आप बस लिख सकते हैं, नई क्रिया दृश्य ही क्योंकि MenuItem है the method जो कार्रवाई लेआउट की आईडी स्वीकार करता है बढ़ाने के लिए की जरूरत नहीं है

संबंधित मुद्दे