2013-09-01 31 views
11

'u Button'u LinearLayout'a programlı olarak eklemek için basit bir yöntem uygularım. Ben setBackground (Drawable arka plan) yöntemini çağırdığınızdaButton.setBackground (Drawable background), NoSuchMethodError

aşağıdaki Error atılır:

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

Benim addNewButton yöntemi:

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); 
} 
Sen bir API üzerinde test ediyor

cevap

29

16 seviyesinin altında (Jelly Bean).

setBackground yöntemi yalnızca bu API seviyesinden itibaren kullanılabilir.

Bu durumda setBackgroundDrawable (kullanımdan kaldırılmış) veya setBackgroundResource ile denerim. Örneğin

:

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

Peki eklemek çözümdür Android'in güncel sürümünü kontrol etmek için ihtiyaç seti kod önce kontrol önerdi düğmenin arka planı programlı olarak Api 16..withou'dan daha düşük t setBackGroundDrawable ... kullanımdan kaldırıldı ...? –

+1

@EslamYousefMohammed cevabımı düzenledi: 'setBackgroundResource' deneyin. – Mena

+0

Ben sette android: minSdkVersion = "9" set var, neden tutulur bu konuda beni uyardı? – wutzebaer

-1

Sen setBackground() kullanamazsınız. Bu yöntem Android seviyenizde mevcut olmayabilir.

-
+0

FYI: Mevcut haliyle, bu bir yanıttan daha [yorum] (http://stackoverflow.com/help/privileges/comment) daha fazladır. (Muhtemelen oylama nedeni budur). Bir "cevap" da, sorunun çözülmesi için olası alternatifleri de içermeli, [kabul edilen cevapta olduğu gibi] (http://stackoverflow.com/a/18559344/104223). [Cevap]. – Leigh

1

Bir Görünüm için homojen bir arka plan oluşturmak için, çizilebilir bir şekil türü kaynağı oluşturabilir ve bunu setBackgroundResource ile kullanabilirsiniz.

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> 

Etkinlik:

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

Ama bu düz ve yersiz, oldukça kötü bakacağız. Düğmeye benzeyen renkli bir düğme isterseniz, kendiniz tasarlayabilirsiniz (yuvarlak köşeler, kontur, degrade dolgulu ...) veya hızlı ve kirli bir çözüm düğmenin arka planına bir PorterDuff filtresi eklemektir:

Android 16 sonra setBackgroundDrawable kullanımdan kaldırıldı yana
Button b = (Button)findViewById(R.id.myButton); 
PorterDuffColorFilter redFilter = new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY); 
b.getBackground().setColorFilter(redFilter); 
0

, ben

ayrıca

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)); 
} 
İlgili konular