web-dev-qa-db-ja.com

Button.setBackground(Drawable background)がNoSuchMethodErrorをスローします

ButtonをプログラムでLinearLayoutに追加する簡単なメソッドを実装しています。

SetBackground(Drawable background)メソッドを呼び出すと、次の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);
}
11

レベル16未満のAPIでテストしている可能性があります( 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);
35
Mena

ビューに均一な背景を作成するには、形状タイプの描画可能なリソースを作成し、それをsetBackgroundResourceで使用します。

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

しかし、これはかなり悪く、平坦で、場違いです。ボタンのように見える色付きのボタンが必要な場合は、自分で設計する(丸い角、ストローク、グラデーションの塗りつぶしなど)か、ボタンの背景にPorterDuffフィルターを追加することで高速で汚れたソリューションを実現できます。

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

Android 16の後、setBackgroundDrawableは廃止されるため、コードを設定する前に確認することをお勧めします

Androidもの現在のバージョンを確認する必要があります

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));
}
0
Sruit A.Suk