অ্যান্ড্রয়েড: প্রসঙ্গের বিকল্প।ড্রেটযোগ্য ()


88

আমি context.getDrawable()আমার প্রকল্পে এটি ব্যবহার করেছি:

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

তবে গ্রহন আমাকে একটি ত্রুটি দিচ্ছে যে এটির একটি দরকার Minimum API level of 21। এর অর্থ হ'ল দ্রুত Google অনুসন্ধানের পরে আমার অ্যাপ্লিকেশনটি কেবল ব্যবহারযোগ্য হবে Android 5.0। যেহেতু সমস্ত ডিভাইস অ্যান্ড্রয়েডের এই সংস্করণটি ব্যবহার করছে না আমি এর বিকল্প চাই context.getDrawable()

উত্তর:


203

এসডিকে 22 ডকুমেন্টেশন অনুসারে পূর্বে গৃহীত পদ্ধতিটি অবচয় করা হয়েছে:

Android.os.Build.VERSION_CODES # JELLY_BEAN এর পূর্বে, এখানে পাস করা রিসোর্স আইডি অন্য অঙ্কনযোগ্য সংস্থানটির একটি উপন্যাস হলে এই ফাংশনটি চূড়ান্ত কনফিগারেশন ঘনত্বটি পুনরুদ্ধার করতে পারে না। এর অর্থ হ'ল যদি ওরফে সংস্থার ঘনত্বের কনফিগারেশনটি প্রকৃত সংস্থান থেকে আলাদা হয় তবে প্রত্যাবর্তনযোগ্য অঙ্কনযোগ্যটির ঘনত্বটি ভুল হবে, যার ফলে খারাপ স্কেলিং হবে।

এই উত্তরে নির্দেশিত হিসাবে আরও ভাল সমাধান কনটেক্সট কমপ্যাট ব্যবহার করা হবে : ContextCompat.getDrawable(context, R.drawable.***)


4
এটি আরও প্রাসঙ্গিক বলে আমি এই উত্তরটি এখনই গ্রহণ করেছি :)
ব্রাম

26

getResources()প্রসঙ্গের পরে একটি যুক্ত করার চেষ্টা করুন , তাই এটি:

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

কাজ করা উচিত.


4
রিসোর্স.জেটড্রেবলকে কনটেক্সট.ট্রেটযোগ্য
জো বৌবিয়ার

12

আমার একই পরিস্থিতি ছিল যা আমি getDrawable () পদ্ধতির উল্লেখ করতে চেয়েছিলাম যা এখন অবনতিযুক্ত।

আমি কি ব্যবহার করেছি,

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

আশা করি এটা তোমাকে সাহায্য করবে


9

আমারও আগে এরকম সমস্যা ছিল। আপনি কি এভাবে চেষ্টা করার চেষ্টা করেছেন?

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

এটি অবচয় করা হয়েছে।
তাসলিম ওসেনি


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

কোটলিন প্রোগ্রামারদের জন্য সমাধানটি দেখে মনে হচ্ছে:

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

বা (এপিআই 22 থেকে)

val greenProgressbar = ContextCompat.getDrawable(R.drawable.custom_progressbargreen)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.