2013-09-01 5 views
11

फेंकता है मैं को LinearLayout प्रोग्रामेटिक रूप से जोड़ने के लिए एक सरल विधि लागू कर रहा हूं।बटन.सेटबैकग्राउंड (ड्राइटेबल पृष्ठभूमि) NoSuchMethodError

जब मैं setBackground (Drawable पृष्ठभूमि) विधि आह्वान, निम्नलिखित Error फेंक दिया जाता है:

java.lang.NoSuchMethodError: android.widget.Button.setBackground

मेरे addNewButton विधि:

private void addNewButton(Integer id, String name) { 

     Button b = new Button(this); 
     b.setId(id); 
     b.setText(name); 
     b.setTextColor(color.white); 
     b.setBackground(this.getResources().getDrawable(R.drawable.orange_dot)); 
      //llPageIndicator is the Linear Layout. 
     llPageIndicator.addView(b); 
} 

उत्तर

29

आप एक API पर परीक्षण किया जा सकता है नीचे स्तर 16 (Jelly Bean)।

setBackground विधि केवल उस API स्तर से उपलब्ध है।

यदि यह मामला है तो मैं setBackgroundDrawable (बहिष्कृत) या setBackgroundResource के साथ प्रयास करूंगा।

उदाहरण के लिए:

Drawable d = getResources().getDrawable(R.drawable.ic_launcher); 
Button one = new Button(this); 
// mediocre 
one.setBackgroundDrawable(d); 
Button two = new Button(this); 
// better 
two.setBackgroundResource(R.drawable.ic_launcher); 
+0

तो, जोड़ने के लिए समाधान है जांच करने की आवश्यकता एपीआई 16..withou से कम करने के लिए प्रोग्राम की पृष्ठभूमि प्रोग्रामेटिक रूप से टी सेट बैकग्राउंड ड्राउबल ... जो बहिष्कृत है ...? –

+1

@EslamYousefMohammed ने मेरा जवाब संपादित किया: 'setBackgroundResource' आज़माएं। – Mena

+0

मैंने एंड्रॉइड सेट किया है: minSdkVersion = "9" मेरे मैनिफेस्ट में, मुझे ग्रहण क्यों नहीं करता है? – wutzebaer

-1

आप setBackground() उपयोग नहीं कर सकते। यह विधि आपके एंड्रॉइड स्तर पर उपलब्ध नहीं हो सकती है।

+0

एफवाईआई: अपने वर्तमान रूप में, यह एक उत्तर से अधिक [टिप्पणी] (http://stackoverflow.com/help/privileges/comment) है। (शायद यही कारण है कि इसे वोट दिया गया था)। एक "उत्तर" में समस्या को हल करने के लिए संभावित विकल्प भी शामिल होना चाहिए, [स्वीकृत उत्तर के रूप में] (http://stackoverflow.com/a/18559344/104223)। उत्तर देखो]। – Leigh

1

किसी दृश्य के लिए एक समरूप पृष्ठभूमि बनाने के लिए, आप प्रकार के आकार का एक ड्रॉबल संसाधन बना सकते हैं, और सेटबैकग्राउंड रिसोर्स के साथ इसका उपयोग कर सकते हैं।

red_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#FF0000"/>  
</shape> 

गतिविधि:

Button b = (Button)findViewById(R.id.myButton); 
b.setBackgroundResource(R.drawable.red_background); 

लेकिन यह बहुत बुरा, फ्लैट और जगह से बाहर दिखेगा। यदि आप एक बटन की तरह दिखने वाले रंगीन बटन चाहते हैं, तो आप इसे स्वयं डिज़ाइन कर सकते हैं (गोलाकार कोनों, स्ट्रोक, ढाल भरने ...) या एक तेज़ और गंदा समाधान बटन की पृष्ठभूमि में एक पोर्टरडफ फ़िल्टर जोड़ना है:

Button b = (Button)findViewById(R.id.myButton); 
PorterDuffColorFilter redFilter = new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY); 
b.getBackground().setColorFilter(redFilter); 
0

के बाद से एंड्रॉयड 16 के बाद, setBackgroundDrawable हटाई गई है, मैं सेट कोड से पहले जाँच की करने का सुझाव दिया

आप एंड्रॉयड के वर्तमान संस्करण भी

Button bProfile; // your Button 
Bitmap bitmap; // your bitmap 

if(android.os.Build.VERSION.SDK_INT < 16) { 
    bProfile.setBackgroundDrawable(new BitmapDrawable(getResources(), bitmap)); 
} 
else { 
    bProfile.setBackground(new BitmapDrawable(getResources(),bitmap)); 
} 
संबंधित मुद्दे