एंड्रॉइड में बैकग्राउंड ड्रा करने योग्य प्रोग्राम कैसे सेट करें


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
कोटलिन सॉल्यूशन जिसके लिए आवश्यकता हो सकती है: stackoverflow.com/a/54495750/6247186
Hamed 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));
}

लेकिन मुझे लगता है कि समस्या इसलिए होती है क्योंकि आप बड़ी छवियों को लोड करने की कोशिश कर रहे हैं।
यहाँ एक अच्छा ट्यूटोरियल है कि बड़े बिटमैप कैसे लोड करें।

अद्यतन:
getDrawable (int) API स्तर 22


getDrawable(int ) में पदावनत किया गया अब API स्तर 22 में पदावनत कर दिया गया है। आपको इसके बजाय समर्थन पुस्तकालय से निम्न कोड का उपयोग करना चाहिए:

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);
    }
}

ContextCompat पर अधिक जानकारी

एपीआई 22 के रूप में, आपको getDrawable(int, Theme)getDrawable (int) के बजाय विधि का उपयोग करना चाहिए ।

अद्यतन:
यदि आप समर्थन v4 पुस्तकालय का उपयोग कर रहे हैं, तो निम्नलिखित सभी संस्करणों के लिए पर्याप्त होगा।

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

आपको अपने ऐप build.gradle में निम्नलिखित जोड़ना होगा

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

या नीचे दिए गए किसी भी API में रिसोर्सकंपैट का उपयोग कर रहे हैं:

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

3
'getDrawable (int)' पदावनत है।
S.M_Emamian

अरे, मैं केवल एक कार्य करने की कोशिश कर रहा हूं यदि छवि बटन की पृष्ठभूमि एक निश्चित ड्रॉबल संसाधन है। मैं कैसे तुलना कर सकता हूं ... मैंने कोशिश की है 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)इसके बजाय उपयोग कर सकते हैं , Google ने पहले ही इसे AppCompat*विजेट / दृश्य में लागू किया है , जैसे:android.support.v7.widget.AppCompatCheckBox
mochadwi

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

अब, onCreate, onResume जैसे किसी भी फ़ंक्शन के अंदर

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
अब इसे हटा दिया गया है
user7856586

4

मैं एक minSdkVersion 16 और targetSdkVersion 23
का उपयोग कर रहा हूं । निम्नलिखित मेरे लिए काम कर रहा है, यह उपयोग करता है

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

के बजाय का उपयोग करने का:

layout.setBackgroundResource(R.drawable.ready);

बल्कि उपयोग:

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

getActivity()एक टुकड़ा में प्रयोग किया जाता है, अगर एक गतिविधि के उपयोग से बुला रहा है this


2

यदि आपकी पृष्ठभूमि अभी ड्रा करने योग्य फ़ोल्डर में है, तो अपने प्रोजेक्ट में चित्र को ड्रा करने योग्य से ड्रॉबल-नोड्पी फ़ोल्डर में ले जाने का प्रयास करें। यह मेरे लिए काम करता है, ऐसा लगता है कि अन्य छवियों को उनके द्वारा स्व ..


5
ठीक है अगर आपको उन छवियों की एक प्रति नहीं मिली है जिन्हें आपको परियोजना में एचडी गुणवत्ता में उपयोग करने की आवश्यकता है, तो एंड्रॉइड को सामान्य ड्रॉबल फ़ोल्डर का उपयोग करके उन्हें भद्दा गुणवत्ता के लिए पुनर्विक्रय क्यों करने दें। और यहां तक ​​कि सवाल पुराना है, अगर यह अभी भी Google में पॉप अप करता है तो इसमें कुछ नया पोस्ट करना ठीक है।
जॉर्डन

1

अपनी कक्षा के शीर्ष पर (किसी भी तरीके से पहले) इसे जोड़कर ड्रा करने योग्य संसाधन को एक चर में बाँधने के लिए तितलियों का उपयोग करें ।

@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

एप्लिकेशन के अंदर / Res / your_xml_layout_file .xml

  1. अपने पैरेंट लेआउट में एक नाम निर्दिष्ट करें।
  2. अपने MainActivity पर जाएं और findViewById (R.id। "दिए_नाम") को कॉल करके अपना RelativeLayout खोजें।
  3. एक क्लासिक ऑब्जेक्ट के रूप में लेआउट का उपयोग करें, विधि setBackgroundColor () कहकर।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.