Android: Reference.getDrawable के लिए वैकल्पिक ()


84

मैंने context.getDrawable()अपने प्रोजेक्ट में इस तरह का उपयोग किया है :

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);

लेकिन ग्रहण मुझे एक त्रुटि है कि यह एक जरूरत है दे रहा है Minimum API level of 21। इसका मतलब यह होगा कि एक त्वरित Google खोज के बाद मेरा APP केवल प्रयोग करने योग्य होगा Android 5.0। चूंकि सभी डिवाइस एंड्रॉइड के इस संस्करण का उपयोग नहीं कर रहे हैं, इसलिए मैं इसके लिए एक विकल्प रखना चाहता हूं context.getDrawable()

जवाबों:


201

एसडीके 22 प्रलेखन के अनुसार पहले स्वीकार की गई विधि को हटा दिया गया है:

Android.os.Build.VERSION_CODES # JELLY_BEAN से पहले, यह फ़ंक्शन अंतिम कॉन्फ़िगरेशन घनत्व को सही ढंग से पुनर्प्राप्त नहीं करेगा जब संसाधन आईडी यहां पारित किसी अन्य ड्रॉबल संसाधन के लिए अन्य नाम है। इसका मतलब यह है कि अगर उपनाम संसाधन का घनत्व वास्तविक संसाधन से अलग है, तो वापस आ सकने योग्य का घनत्व गलत होगा, जिसके परिणामस्वरूप खराब स्केलिंग होगी।

जैसा कि इस उत्तर में बताया गया है कि बेहतर समाधान का उपयोग करना होगा ContextCompat : ContextCompat.getDrawable(context, R.drawable.***)


1
मैंने इस उत्तर को अब स्वीकार कर लिया है क्योंकि यह अधिक प्रासंगिक है :)
ब्रम्ह

26

getResources()संदर्भ के बाद जोड़ने का प्रयास करें , इसलिए यह:

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

कार्य करना चाहिए।


4
Resources.getDrawable
Context.getDrawable के

12

मेरे पास एक ही स्थिति थी जिसे मैं getDrawable () विधि से संदर्भित करना चाहता था जिसे अब हटा दिया गया है।

मैंने जो प्रयोग किया,

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));

आशा है कि यह आपकी मदद करेगा


9

मुझे पहले भी ऐसी ही समस्या थी। क्या आपने इसे इस तरह से करने की कोशिश की है?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

यह पदावनत है।
तस्लीम ओसेनी

2

इसे इस्तेमाल करे:

AppCompatResources.getDrawable(context, R.drawable.*)

1

आपको "getDrawable (id, this.getTheme ())" का उपयोग करना चाहिए। इस विधि को अब तक नहीं हटाया गया है।

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    view.setBackground(getResources().getDrawable(R.drawable.radioline,this.getTheme()));
} else {
   view.setBackground(getResources().getDrawable(R.drawable.radioline));
}


1

आप ड्रॉबल (कोटलिन) के साथ काम किए बिना सीधे संसाधन सेट कर सकते हैं:

btn.setImageResource(R.drawable.ic_XXX)

1

Kotlin प्रोग्रामर के लिए समाधान की तरह दिखता है:

val greenProgressbar = context!!.getDrawable(R.drawable.custom_progressbargreen)

या (एपीआई 22 से)

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