2015-10-15 5 views
28

से गतिशील रूप से FAB (फ़्लोटिंग एक्शन बटन) आइकन बदलें, रनटाइम के दौरान किसी गतिविधि में FAB आइकन को कैसे बदलें। ऐसा करने के तरीके समझ में नहीं आता>एंड्रॉइड: कोड

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fabMainActivity); 

मैं जानता हूँ कि इस fab.setBackgroundDrawable(); का उपयोग कर के लिए संभव है, लेकिन मैं एक नौसिखिया Android के लिए कर रहा हूँ, - मैं इस कोड है।

किसी भी मदद की अत्यधिक सराहना की जाएगी।

धन्यवाद

+0

क्या आपने 'fab की कोशिश की है। सेट बैकग्राउंड'? –

+0

मैं ऐसा करने में असमर्थ हूं .. क्योंकि यह एक आकर्षित करने की उम्मीद करता है .. और idk कैसे आकर्षित करने के लिए ?? –

+4

क्या आपने Drawable फ़ोल्डर में आइकन जोड़ा है? यदि हां तो बस 'R.drawable पास करें। 'to 'setBackground' विधि अन्यथा पहले ड्रॉ करने योग्य फ़ोल्डर में आइकन जोड़ें, फिर –

उत्तर

51

FloatingActionButton स्रोत बदलने:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      floatingActionButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_full_sad, context.getTheme())); 
     } else { 
      floatingActionButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_full_sad)); 
    } 

यह बजाय समर्थन पुस्तकालय से निम्न कोड से प्रतिस्थापित किया जा सकता है:

floatingActionButton.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_full_sad)); 
+1

का उपयोग करना चाहिए' getAplicationContext' से बचने का प्रयास करें जितना संभव हो सके – zozelfelfo

+0

@zozelfelfo वह क्यों है? – SaKet

+5

यह जरूरी नहीं है कि यह सच है। यह उस पर निर्भर करता है जो आप पूरा करने की कोशिश कर रहे हैं। गतिविधि संदर्भ इस बात के आधार पर स्मृति रिसाव का कारण बन सकता है कि आप इसका उपयोग कैसे कर रहे हैं। आम तौर पर यह गतिविधि संदर्भ है जो परेशानी है क्योंकि यह स्मृति रिसाव का कारण बन सकता है। यदि गतिविधि मर जाती है और किसी अन्य ऑब्जेक्ट के संदर्भ में उस गतिविधि का संदर्भ होता है तो इसे कचरा नहीं बनाया जा सकता है। हालांकि, कुछ मामले हैं जब आप ऐप संदर्भ पर गतिविधि संदर्भ का उपयोग करना चाहते हैं, [पूर्व] (http://developer.android.com/reference/android/content/ContextWrapper.html#getApplicationContext%28%29)। –

12

या आप का उपयोग समर्थन लाइब्रेरी:

floatingActionButton.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_full_sad)); 
+1

यह सही तरीका है। – Iqbal

10

आप समर्थन लाइब्रेरी उपयोग कर रहे हैं:

floatingActionButton.setImageResource(R.drawable.icon_name) 
+0

यह चिह्नित जवाब होना चाहिए क्योंकि इस उपयोग के साथ वेक्टर का उपयोग कर सकते हैं –

0

इस प्रकार मैं क्या उपयोग कर रहा हूँ,

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_btn); 

// State 1 -on 

fab.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.fab_on)); 

// State 2 - off 

fab.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.fab_off)); 
0

मान लें कि आप अपने फैब की पृष्ठभूमि के रूप में छवि ic_arrow_forward.png का उपयोग करेगा:

fab.setImageResource(R.mipmap.ic_arrow_forward);

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