নতুন অ্যান্ড্রয়েড এপিআই 22 getResources().getDrawable()
দিয়ে এখন অবচয় করা হয়েছে। এখন সর্বোত্তম পন্থাটি শুধুমাত্র ব্যবহার করা getDrawable()
।
কী বদলে গেল?
Resources#getDrawable(int)
Resources#getColor(int)
নতুন অ্যান্ড্রয়েড এপিআই 22 getResources().getDrawable()
দিয়ে এখন অবচয় করা হয়েছে। এখন সর্বোত্তম পন্থাটি শুধুমাত্র ব্যবহার করা getDrawable()
।
কী বদলে গেল?
Resources#getDrawable(int)
Resources#getColor(int)
উত্তর:
আপনি কোন ধরণের অঙ্কনযোগ্য লোড করছেন তার উপর নির্ভর করে আপনার সঠিকভাবে (এবং ভবিষ্যতের প্রমাণ ) উপায়টিকে হ্রাস করার জন্য আপনার কাছে কিছু বিকল্প রয়েছে:
ক) drawables সঙ্গে থিম বৈশিষ্ট্য
ContextCompat.getDrawable(getActivity(), R.drawable.name);
আপনার ক্রিয়াকলাপ থিম নির্দেশ হিসাবে আপনি একটি স্টাইলযুক্ত অঙ্কনযোগ্য পাবেন। আপনার সম্ভবত এটিই প্রয়োজন।
খ) থিম বৈশিষ্ট্য ছাড়াই অঙ্কনযোগ্য
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
আপনি আপনার স্টাইলহীন অঙ্কনযোগ্য পুরানো উপায়ে পাবেন। অনুগ্রহ করে নোট করুন: অবচিত ResourcesCompat.getDrawable()
হয় না !
এক্সট্রা) অন্য থিমের থিম বৈশিষ্ট্য সহ অঙ্কনযোগ্য
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
পরিবর্তে সমর্থন লাইব্রেরি থেকে আপনার নিম্নলিখিত কোডটি ব্যবহার করা উচিত:
ContextCompat.getDrawable(context, R.drawable.***)
এই পদ্ধতিটি ব্যবহার করা কল করার সমতুল্য:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return resources.getDrawable(id, context.getTheme());
} else {
return resources.getDrawable(id);
}
এআইপি 21 হিসাবে, আপনার getDrawable(int, Theme)
পরিবর্তে পদ্ধতিটি ব্যবহার করা উচিত getDrawable(int)
, কারণ এটি আপনাকে প্রদত্ত স্ক্রিনের ঘনত্ব / থিমের জন্য কোনও নির্দিষ্ট সংস্থান আইডির সাথে যুক্ত একটি আঁকতে সক্ষম অবজেক্ট আনতে দেয়। অবচিত getDrawable(int)
পদ্ধতিতে কল করা কল করার সমতুল্য getDrawable(int, null)
।
getDrawable (int id)
পদ্ধতিকেও বোঝায় Context
। এটি একই রকম getResources().getDrawable(id, getTheme());
এবং নতুন এপিআই ব্যবহার করে।
getDrawable(int, Resources.Theme)
।
এই লাইনটি প্রতিস্থাপন করুন:
getResources().getDrawable(R.drawable.your_drawable)
সঙ্গে ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
সম্পাদনা
ResourcesCompat
এখন অবচয় করা হয়। তবে আপনি এটি ব্যবহার করতে পারেন:
ContextCompat.getDrawable(this, R.drawable.your_drawable)
(এখানে this
প্রসঙ্গে)
আরও তথ্যের জন্য এই লিঙ্কটি অনুসরণ করুন: কনটেক্সটকম্প্যাট
getResources().getDrawable()
22 এপিআই স্তরে অবনতি হয়েছে Now এখন আমাদের থিমটি যুক্ত করতে হবে:getDrawable (ইন আইডি, সংস্থানসমূহ। থিম থিম) (এপিআই স্তর 21 এ যুক্ত হয়েছে)
এটি একটি উদাহরণ:
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
পরবর্তী সংস্করণগুলির জন্য কীভাবে বৈধতা দেওয়া যায় এটি একটি উদাহরণ:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
} else {
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage));
}
Build.VERSION_CODES.LOLLIPOP is API 21
, তাই না এটা হওয়া উচিত if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
নাকি if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
? কিছু মনে করো না. নীচে থেকে "এপিআই 21 এ পদ্ধতিটি যুক্ত করা হয়েছিল তবে এটি 22
তুমি ব্যবহার করতে পার
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
এটা আমার জন্য কাজ
আমি কীভাবে একটি তালিকা ভিউ লোড করতে অ্যারেতে সমস্যাটি স্থির করেছি তার একটি উদাহরণ, আশা করি এটি সহায়তা করবে।
mItems = new ArrayList<ListViewItem>();
// Resources resources = getResources();
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));
এটা চেষ্টা কর:
public static List<ProductActivity> getCatalog(Resources res){
if(catalog == null) {
catalog.add(new Product("Dead or Alive", res
.getDrawable(R.drawable.product_salmon),
"Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
catalog.add(new Product("Switch", res
.getDrawable(R.drawable.switchbook),
"Switch by Chip Heath and Dan Heath", 24.99));
catalog.add(new Product("Watchmen", res
.getDrawable(R.drawable.watchmen),
"Watchmen by Alan Moore and Dave Gibbons", 14.99));
}
}
আপনি যদি এসডিকে> 21 (ললিপপ বা 5.0) ব্যবহার লক্ষ্য করে থাকেন
context.getDrawable(R.drawable.your_drawable_name)
getDrawable (int অঙ্কনযোগ্য) এপিআই স্তরে 22 অবমূল্যায়ন করা হয়েছে reference রেফারেন্সের জন্য এই লিঙ্কটি দেখুন ।
এখন এই সমস্যাটির সমাধানের জন্য আমাদের আইডি সহ একটি নতুন নির্মাতা পাস করতে হবে যেমন: -
getDrawable(int id, Resources.Theme theme)
সমাধানের জন্য এটি করুন: -
জাভাতে: -
ContextCompat.getDrawable(getActivity(), R.drawable.name);
অথবা
imgProfile.setImageDrawable(getResources().getDrawable(R.drawable.img_prof, getApplicationContext().getTheme()));
কোটলিনে: -
rel_week.background=ContextCompat.getDrawable(this.requireContext(), R.color.colorWhite)
অথবা
rel_day.background=resources.getDrawable(R.drawable.ic_home, context?.theme)
আশা করি এটি আপনাকে সহায়তা করবে। ধন্যবাদ
en এপিআই স্তর 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
এই থ্রেডের পরামর্শ প্রয়োগ করার পরেও যারা এই সমস্যাটি এখনও সমাধান করতে পেরেছেন তাদের জন্য (আমি তার মতো হয়ে থাকতাম) আপনার অ্যাপ্লিকেশন ক্লাসে, অনক্রিট () পদ্ধতিতে এই লাইনটি যুক্ত করুন
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
যেমনটি এখানে এবং এখানে পরামর্শ দেওয়া হয়েছে কখনও কখনও এটি সম্পদগুলি থেকে ভেক্টরদের অ্যাক্সেস করার প্রয়োজন হয় বিশেষত যখন আপনি মেনু আইটেমগুলি ইত্যাদির সাথে লেনদেন করেন
কোটলিনে আপনি এক্সটেনশন ব্যবহার করতে পারেন
fun Context.getMyDrawable(id : Int) : Drawable?{
return ContextCompat.getDrawable(this, id)
}
তারপর মত ব্যবহার করুন
context.getMyDrawable(R.drawable.my_icon)
বিল্ড।
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme);
} else {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder);
}
BuildVersionCodes
জামারিনের সাথে কি কোনও শ্রেণি নির্দিষ্ট নয় ?
getDrawable (int id)
ক্লাসের পদ্ধতিResources
অবমূল্যায়ন করা হয়েছে। আপনার এখনgetDrawable (int id, Resources.Theme theme)
নতুন থিমের প্যারামিটার সহ পদ্ধতিটি ব্যবহার করা উচিত ।