संसाधन से कैसे आकर्षित बनाने के लिए


283

मेरी एक छवि है res/drawable/test.png(R.drawable.test)।
मैं इस इमेज को एक फंक्शन में पास करना चाहता हूँ Drawable, जो स्वीकार करता है , जैसे mButton.setCompoundDrawables()

तो मैं एक छवि संसाधन को एक में कैसे बदल सकता हूं Drawable?

जवाबों:


567

आपकी गतिविधि का तरीका getResource होना चाहिए। करना:

Drawable myIcon = getResources().getDrawable( R.drawable.icon );

2
यदि आप एक्टिविटी क्लास के बाहर ऐसा चाहते हैं, तो आपको कॉनटेक्स्ट तक पहुंचने का कोई और रास्ता खोजना होगा जहाँ getResource () रहता है; यह उत्तर इसे कंस्ट्रक्टर में पारित करने की सिफारिश करता है
रॉमो

50
एपीआई संस्करण 21 के रूप में इस विधि को पदावनत किया गया है और आपको इसके द्वारा प्रतिस्थापित किया जाना चाहिए: ड्रा करने योग्य ड्रा करने योग्य = ResourcesCompat.getDrawable (getResources (), page.getImageId (), null);
बोरेन

3
@Boren यह ContextCompat.getDrawable (यह, R.drawable.gov) का उपयोग करने के समान है?
Zach

2
उपरोक्त सुझावों में से कोई भी काम करने के लिए नहीं लगता है अगर R.drawable.icon एक वेक्टर ड्रॉबल है।
फ्रैक्टलबॉब

4
यदि आप इसका उपयोग कर रहे हैं, तो आप इसका उपयोग नहीं कर सकते। इसके बजाय AppCompatResources.getDrawable (संदर्भ, R.drawable.icon) का उपयोग करें।
धवल पटेल

136

यह कोड हटा दिया गया है:

Drawable drawable = getResources().getDrawable( R.drawable.icon );

इसके बजाय इसका उपयोग करें:

Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);

11
विदित हो कि यह दिए गए संदर्भ से विषय को लागू करेगा। यदि आप यह सुनिश्चित करना चाहते हैं कि कोई थीम उपयोग नहीं की जाती है, तो आप उपयोग कर सकते हैं ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);(जहां तीसरा पैराग्राफ एक वैकल्पिक थीम उदाहरण है)।
वॉनगैंड्रोइड

23

getDrawable (int id)विधि एपीआई 22 के रूप में मूल्यह्रास हुआ है।

इसके बजाय आपको getDrawable (int id, Resources.Theme theme)एपीआई 21+ के लिए उपयोग करना चाहिए

कोड कुछ इस तरह दिखेगा।

Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
    myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
    myDrawable = context.getResources().getDrawable(id);
}

हर एपी के लिए अशक्त क्यों नहीं? प्लस: क्या आप सुनिश्चित हैं कि अशक्त सबसे अच्छा विकल्प है?
जोनाथन्रज

1
GetDrawable (int id, Resources.Theme थीम) API 21 तक आने के बारे में नहीं बताया।
क्रिस स्टिलवेल

याgetResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
सिमोन फेदरस्टोन

13

मैं यह जोड़ना चाहूंगा कि अगर आपको getDrawable (...) का उपयोग करते समय "पदावनत" संदेश मिल रहा है, तो आपको इसके बजाय समर्थन लाइब्रेरी से निम्न विधि का उपयोग करना चाहिए।

ContextCompat.getDrawable(getContext(),R.drawable.[name])

इस विधि का उपयोग करते समय आपको getResources () का उपयोग करने की आवश्यकता नहीं है।

यह कुछ करने जैसा है

Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
    mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
    mDrawable = getResources().getDrawable(R.id.[name]);
}

यह लॉलीपॉप के पूर्व और बाद के दोनों संस्करणों पर काम करता है।


4

वेक्टर संसाधन से आकर्षित होने के बावजूद, चाहे उसका वेक्टर हो या नहीं:

AppCompatResources.getDrawable(context, R.drawable.icon);

नोट: वेक्टर संसाधन के लिए
ContextCompat.getDrawable(context, R.drawable.icon);उत्पादन करेंगे android.content.res.Resources$NotFoundException


3

यदि आप उस दृश्य से चित्रण प्राप्त करने का प्रयास कर रहे हैं जहां छवि सेट की गई है,

ivshowing.setBackgroundResource(R.drawable.one);

तब ड्रॉबल केवल निम्न कोड के साथ शून्य मान लौटाएगा ...

   Drawable drawable = (Drawable) ivshowing.getDrawable();

इसलिए, यदि आप किसी विशेष दृश्य से ड्रॉबल प्राप्त करना चाहते हैं, तो निम्नलिखित कोड के साथ छवि को सेट करना बेहतर है।

 ivshowing.setImageResource(R.drawable.one);

इसके बाद ही हम वास्तव में परिवर्तित कर पाएंगे।


1

यदि आप एक टुकड़े से विरासत में मिले हैं, तो आप कर सकते हैं:

Drawable drawable = getActivity().getDrawable(R.drawable.icon)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.