রিসোর্স থেকে কীভাবে ড্রয়যোগ্য তৈরি করবেন


283

আমার একটি চিত্র রয়েছে res/drawable/test.png(আর। ডিগ্রিভেবল.টেষ্ট)।
আমি এই চিত্রটি এমন কোনও ফাংশনে পাস করতে চাই যা গ্রহণ করে Drawable, যেমন mButton.setCompoundDrawables()

তাহলে আমি কীভাবে কোনও চিত্রের সংস্থানকে একটিতে রূপান্তর করতে পারি Drawable?

উত্তর:


567

আপনার ক্রিয়াকলাপটিতে পদ্ধতিটির উত্স হওয়া উচিত। না:

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

2
যদি আপনি কোনও ক্রিয়াকলাপের ক্লাসের বাইরে এটি দেখতে চান তবে আপনাকে কনটেক্সটে পৌঁছানোর জন্য আরও কিছু উপায় খুঁজে বের করতে হবে যেখানে getRes્રોसেস () থাকে; এই উত্তরটি কনস্ট্রাক্টারে পাস করার প্রস্তাব দেয়
রাইমো

50
এপিআই সংস্করণ 21 অনুসারে এই পদ্ধতিটি অবচিত করা হয়েছে এবং আপনার দ্বারা প্রতিস্থাপন করা উচিত: অঙ্কনযোগ্য অঙ্কনযোগ্য = রিসোর্সসকম্প্যাট.সেটড্রাব্যাবল (গেটআরোসোর্স (), পেজ.সেটমেজেশন আইডি () নাল);
বোরেন

3
@ বোরেন কি কনটেক্সট কমপ্যাট.জেটড্রেইবল (এটি, আর.ড্রেব্যাবল.আইকন) ব্যবহার করার মতো ;??
Zach

2
R.drawable.icon যদি ভেক্টর আঁকতে সক্ষম হয় তবে উপরের পরামর্শগুলির মধ্যে কোনওটিই কাজ করছে বলে মনে হচ্ছে না।
ফ্র্যাক্টালবোজ

4
আপনি যদি ভেক্টর ড্রয়াবল ব্যবহার করেন তবে এটি ব্যবহার করবেন না। পরিবর্তে অ্যাপকোম্প্যাটআরসোর্স.জেটড্রেইবল (প্রসঙ্গে, আর.ড্রেবিয়েবল.আইকন) ব্যবহার করুন।
ধাওয়াল প্যাটেল 3'18

136

এই কোডটি অবচিত করা হয়েছে:

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

পরিবর্তে এটি ব্যবহার করুন:

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

11
সচেতন থাকুন যে এটি প্রদত্ত প্রসঙ্গ থেকে থিমটি প্রয়োগ করবে। যদি আপনি কোনও থিম ব্যবহৃত না হয় তা নিশ্চিত করতে চান, আপনি ব্যবহার করতে পারেন ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);(যেখানে 3 য় পরম anচ্ছিক থিম উদাহরণ)।
ভাগানড্রয়েড

23

getDrawable (int id)পদ্ধতি এপিআই 22 হিসাবে অবমূল্যায়ন ঘটেছে।

পরিবর্তে আপনার getDrawable (int id, Resources.Theme theme)API 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 আইডি, রিসোর্সস। থিম থিম) এপিআই 21 21 অবধি আসে নি
ক্রিস স্টিলওয়েল

বাgetResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
সাইমন ফেদারস্টোন

13

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

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

এই পদ্ধতিটি ব্যবহার করার সময় আপনাকে getRes Source () ব্যবহার করতে হবে না।

এটি এমন কিছু করার সমতুল্য

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)

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