অ্যান্ড্রয়েডে প্রোগ্রামিয়ালি অঙ্কনযোগ্য পটভূমি কীভাবে সেট করুন


289

পটভূমি সেট করতে:

RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);

এটি করার সর্বোত্তম উপায়?


2
ধন্যবাদ! আপনার প্রশ্ন এবং সমস্ত সহায়ক উত্তরগুলি আমাকে উইজেটের অভ্যন্তরে চিত্র বোতামটির পটভূমি সংস্থান সেট করতে সহায়তা করেছে । কেউ আগ্রহী এমন ক্ষেত্রে এখানে একটি নমুনা কোড রয়েছে:remoteViews.setInt(R.id.btn_start,"setBackgroundResource", R.drawable.ic_button_start);
স্যাম

1
Kotlin সমাধান কার জন্য প্রয়োজন হতে পারে: stackoverflow.com/a/54495750/6247186
হামেদ Jaliliani

উত্তর:


490

layout.setBackgroundResource(R.drawable.ready);সঠিক.
এটি অর্জনের আরেকটি উপায় হ'ল নিম্নলিখিতটি ব্যবহার করা:

final int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready) );
} else {
    layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
}

তবে আমি মনে করি সমস্যাটি ঘটে কারণ আপনি বড় আকারের চিত্র লোড করার চেষ্টা করছেন। বৃহত্তর বিটম্যাপগুলি কীভাবে লোড করা যায় তা
এখানে একটি টিউটোরিয়াল is

আপডেট:
getDrawable (int) এপিআই স্তরের 22 এ অবনতি হয়েছে


getDrawable(int ) এখন এপিআই স্তরে 22 হ্রাস করা হয়েছে instead পরিবর্তে সমর্থন লাইব্রেরি থেকে আপনার নিম্নলিখিত কোডটি ব্যবহার করা উচিত:

ContextCompat.getDrawable(context, R.drawable.ready)

আপনি যদি ContextCompat.getDrawable এর উত্স কোডটি উল্লেখ করেন , এটি আপনাকে এরকম কিছু দেয়:

/**
 * Return a drawable object associated with a particular resource ID.
 * <p>
 * Starting in {@link android.os.Build.VERSION_CODES#LOLLIPOP}, the returned
 * drawable will be styled for the specified Context's theme.
 *
 * @param id The desired resource identifier, as generated by the aapt tool.
 *            This integer encodes the package, type, and resource entry.
 *            The value 0 is an invalid identifier.
 * @return Drawable An object that can be used to draw this resource.
 */
public static final Drawable getDrawable(Context context, int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 21) {
        return ContextCompatApi21.getDrawable(context, id);
    } else {
        return context.getResources().getDrawable(id);
    }
}

কনটেক্সট কমপ্যাট সম্পর্কিত আরও বিশদ

22 এপ্রিল হিসাবে, আপনার getDrawable(int, Theme)getDrawable (int) এর পরিবর্তে পদ্ধতিটি ব্যবহার করা উচিত ।

আপডেট:
আপনি সমর্থন ভি 4 লাইব্রেরি ব্যবহার করছেন, নিম্নলিখিত সমস্ত সংস্করণ জন্য যথেষ্ট হবে।

ContextCompat.getDrawable(context, R.drawable.ready)

আপনার অ্যাপ্লিকেশন build.gradle এ আপনাকে নিম্নলিখিতগুলি যুক্ত করতে হবে

compile 'com.android.support:support-v4:23.0.0' # or any version above

অথবা নীচের মতো কোনও এপিআইতে রিসোর্সকম্প্যাট ব্যবহার করে:

import android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);

3
'getDrawable (int)' অবমূল্যায়ন করা হয়েছে।
এস এম_এমামিয়ান

আরে, আমি কেবল তখনই কোনও কাজ করার চেষ্টা করছি যদি কোনও চিত্রের বাটনের ব্যাকগ্রাউন্ড চিত্রটি নির্দিষ্ট অঙ্কনীয় উত্স হয়। আমি কীভাবে তুলনা করতে পারি ... if(buttonBackground.equals(R.drawable.myDrawable))যেখানে Drawable buttonBackground = myButton.getBackground();আমি এই ত্রুটিটি পেয়েছি সেখানে চেষ্টা করেছি : snag.gy/weYgA.jpg
রুচির

myActivity.getTheme()নাল প্যারামিটারের পরিবর্তে আপনার পদ্ধতির সর্বশেষ সংস্করণটিরও প্রয়োজন হবে :myView.setBackground( getResources().getDrawable(R.drawable.my_background, activity.getTheme()));
জোন

অথবা আপনি এর AppCompatResources.getDrawable(this.getContext(), resId)পরিবর্তে ব্যবহার করতে পারেন , গুগল ইতোমধ্যে এটি AppCompat*উইজেট / ভিউতে প্রয়োগ করেছে , যেমন:android.support.v7.widget.AppCompatCheckBox
মোচাদবী

108

এটা চেষ্টা কর:

layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));

এবং এপিআই 16 এর জন্য <:

layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));

2
তবে এটি একই জিনিস আহমদ :)
মোহাম্মদ এরশান

4
আহ ঠিক আছে, তাহলে আমি অলস নিনজাস উত্তরটি উল্লেখ করব।
আহমেদ

39
আপনার দরকার নেই getResources().getDrawable()। সঠিক কোডটি layout.setBackgroundResource(R.drawable.ready);ঠিক ব্যবহৃত ওপির মতো। এখানে সমস্যাটি বিটম্যাপের আকার থেকে আসে।
বিভিবি

1
সেটব্যাকগ্রাউন্ডটি এপিআই স্তরের 16 বা তার বেশি।
এরওয়ান

17
RelativeLayout relativeLayout;  //declare this globally

এখন, অনক্রিট, অন-রিসুমের মতো কোনও ফাংশনের ভিতরে

relativeLayout = new RelativeLayout(this);  
relativeLayout.setBackgroundResource(R.drawable.view); //or whatever your image is
setContentView(relativeLayout); //you might be forgetting this

9

আপনি যে কোনও চিত্রের পটভূমিও সেট করতে পারেন:

View v;
Drawable image=(Drawable)getResources().getDrawable(R.drawable.img);
(ImageView)v.setBackground(image);

এটি আমার সমস্যার সমাধান করে তবে আমার (.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)অভ্যন্তরীণ কোডটি প্রয়োগ করতে হবে
আরমান্ডো মার্কস সোব্রিনহো

1
এটি এখন
অবচয়

4

আমি একটি minSdkVersion 16 এবং লক্ষ্যSdkVersion 23 ব্যবহার করছি।
নিম্নলিখিতটি আমার জন্য কাজ করছে, এটি ব্যবহার করে

ContextCompat.getDrawable(context, R.drawable.drawable);

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

layout.setBackgroundResource(R.drawable.ready);

বরং ব্যবহার করুন:

layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));

getActivity()কোনও ক্রিয়াকলাপের জন্য কল করে যদি কোনও খণ্ডে ব্যবহৃত হয় this


2

যদি আপনার ব্যাকগ্রাউন্ডগুলি এখনই অঙ্কনযোগ্য ফোল্ডারে থাকে তবে আপনার প্রকল্পের চিত্রগুলি অঙ্কনযোগ্য থেকে অঙ্কনযোগ্য-নডপি ফোল্ডারে সরানোর চেষ্টা করুন। এটি আমার পক্ষে কাজ করেছে, মনে হয় অন্য কোনও চিত্রগুলি সেগুলি নিজেই পুনরুদ্ধার করেছে ..


5
ভাল, যদি আপনার এই প্রকল্পের HD ডিভিডিতে যে ছবিগুলি ব্যবহার করতে হবে তার একটি অনুলিপি আপনার কাছে না পেয়ে থাকে, তবে অ্যান্ড্রয়েড সাধারণ অঙ্কনীয় ফোল্ডারটি ব্যবহার করে কেন তাদেরকে ক্রেপীয় মানের দিকে পুনরুদ্ধার করতে দিন। এমনকি প্রশ্নটিও পুরানো, যদি এটি গুগলে পপ আপ হয় তবে এটিতে নতুন কিছু পোস্ট করার চেয়ে ঠিক আছে ইমো।
জর্ডি 13

1

ব্যবহারের butterknife আপনার বর্গ উপরের (যে কোন পদ্ধতি আগে) এই যোগ করে একটি পরিবর্তনশীল করতে অঙ্কনযোগ্য সম্পদ জুড়তে অনুমতি।

@Bind(R.id.some_layout)
RelativeLayout layout;
@BindDrawable(R.drawable.some_drawable)
Drawable background;

তারপরে আপনার একটি পদ্ধতির ভিতরে

layout.setBackground(background);

আপনার এটাই দরকার


1
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
     layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.ready));
else if(android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1)
     layout.setBackground(getResources().getDrawable(R.drawable.ready));
else
     layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));





-1

ইনসাইড অ্যাপ্লিকেশন / মাঝামাঝি / your_xml_layout_file .xml

  1. আপনার পিতামাতার বিন্যাসে একটি নাম বরাদ্দ করুন।
  2. আপনার মেইনএ্যাকটিভিটিতে যান এবং সন্ধানী ভিউআইআইডি (আর। আইডি। "প্রদত্ত_নাম") কল করে আপনার রিলেটিভলআউটটি সন্ধান করুন।
  3. পদ্ধতির সেটব্যাকগ্রাউন্ড কালার () কল করে লেআউটটিকে ক্লাসিক অবজেক্ট হিসাবে ব্যবহার করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.