অ্যান্ড্রয়েড প্যাকেজের কোনও সংস্থান আইডি থেকে আপনি কীভাবে একটি অঙ্কনযোগ্য অবজেক্টটি পাবেন?


156

একটি চিত্র বোতামে প্রদর্শন করতে আমার একটি অঙ্কনযোগ্য বস্তু পাওয়া উচিত। অ্যান্ড্রয়েড.আর.ড্রেবলযোগ্য * প্যাকেজ থেকে কোনও অবজেক্ট পাওয়ার জন্য নীচের কোডটি (বা এর মতো কিছু) ব্যবহার করার কোনও উপায় আছে কি?

উদাহরণস্বরূপ যদি অঙ্কনযোগ্যআইডিটি অ্যান্ড্রয়েড.আর.ড্রেবলযোগ্য.সি_ডিলেট ছিল

mContext.getResources().getDrawable(drawableId)

উত্তর:


222
Drawable d = getResources().getDrawable(android.R.drawable.ic_dialog_email);
ImageView image = (ImageView)findViewById(R.id.image);
image.setImageDrawable(d);

আমি আরও দেখতে পেলাম যে অ্যাপ্লিকেশন প্রসঙ্গটি ব্যবহার করা মনে হচ্ছে, ধন্যবাদ।
ব্লেস্কোভিচ

20
22 getDrawable(int id)এপ্রিল হিসাবে। হ্রাস করা হয়। getDrawable(int id, Resources.Theme theme)পরিবর্তে ব্যবহার করুন। পদ্ধতিটি getTheme()সহায়ক হওয়া উচিত।
আইজাক জাইস

1
আমার একটি ছোট সন্দেহ আছে this এই কোডটিতে "সম্পদ টাইপ থেকে পদ্ধতি getDrawable (int) হ্রাস করা হয়"। একটি এসও উত্তর অনুসারে 1. জাভাতে অবচয় পদ্ধতি বা ক্লাস ব্যবহার করা কি ভুল? অবহেলিত সংজ্ঞা থেকে: "@ ডেপ্রেসিটেড এমন একটি প্রোগ্রাম উপাদান যা প্রোগ্রামারদের ব্যবহার থেকে নিরুৎসাহিত করা হয়, এটি সাধারণত বিপজ্জনক কারণ বা আরও ভাল বিকল্পের উপস্থিতি রয়েছে।" এর জন্য আরও ভাল বিকল্প কি।
খুনি

107

এর মতো এপিআই 21 , আপনি ব্যবহার করা উচিত getDrawable(int, Theme)পরিবর্তে পদ্ধতি getDrawable(int), যেমন আপনি একটি আনতে পারবেন drawableযে একটি নির্দিষ্ট সঙ্গে যুক্ত বস্তুর resource IDদেওয়া screen density/themedeprecated getDrawable(int)পদ্ধতি কল করা কল করার সমতুল্য getDrawable(int, null)

পরিবর্তে সমর্থন লাইব্রেরি থেকে আপনার নিম্নলিখিত কোডটি ব্যবহার করা উচিত:

ContextCompat.getDrawable(context, android.R.drawable.ic_dialog_email)

এই পদ্ধতিটি ব্যবহার করা কল করার সমতুল্য:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

context.getDrawable(id);এর সমতুল্য বলে মনে হচ্ছেresources.getDrawable(id, context.getTheme());
এরিকবার্গম্যান 7:47

আপনার যদি সমর্থন লাইব্রেরি থাকে তবে এটি একটি লাইনে করা যেতে পারে:ResourcesCompat.getDrawable(resources, id, context.getTheme());
2col

9

21 এপিআই হিসাবে, আপনি এটি ব্যবহার করতে পারেন:

   ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);

পরিবর্তে ContextCompat.getDrawable(context, android.R.drawable.ic_dialog_email)


2
আপনি দয়া করে
পছন্দটির

3

সেরা উপায়

 button.setBackgroundResource(android.R.drawable.ic_delete);

বা এটি অঙ্কনযোগ্য বাম জন্য এবং ডান ইত্যাদির জন্য এর মতো কিছু

int imgResource = R.drawable.left_img;
button.setCompoundDrawablesWithIntrinsicBounds(imgResource, 0, 0, 0);

এবং

getResources().getDrawable() এখন অবচয় করা হয়েছে


0

21 এপিআই থেকে অবচয় getDrawable(int id)করা হয়েছে। সুতরাং এখন আপনার ব্যবহার করা প্রয়োজন

ResourcesCompat.getDrawable(context.getResources(), R.drawable.img_user, null)

তবে সর্বোত্তম উপায় হ'ল: আপনার আঁকো এবং রঙ পাওয়ার জন্য আপনার একটি সাধারণ শ্রেণি তৈরি করা উচিত কারণ যদি ভবিষ্যতে কোনও জিনিস পরিবর্তন বা অবমূল্যায়ন হয় তবে আপনার প্রকল্পের সর্বত্র পরিবর্তন করার দরকার নেই You আপনি কেবল এই পদ্ধতিতে পরিবর্তন করুন

object ResourceUtils {
    fun getColor(context: Context, color: Int): Int {
        return ResourcesCompat.getColor(context.getResources(), color, null)
    }

    fun getDrawable(context: Context, drawable: Int): Drawable? {
        return ResourcesCompat.getDrawable(context.getResources(), drawable, null)
    }
}

এই পদ্ধতিটি ব্যবহার করুন:

Drawable img=ResourceUtils.getDrawable(context, R.drawable.img_user)
image.setImageDrawable(img);

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