14

我正在实现一个简单的方法来以编程方式将 a 添加Button到 a 中。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);
}
4

5 回答 5

42

您可能正在测试低于 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);
于 2013-09-01T14:24:27.173 回答
3

要为 View 创建同质背景,您可以创建 shape 类型的可绘制资源,并将其与 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);
于 2013-09-01T17:46:42.067 回答
0

由于在 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));
}
于 2015-05-29T06:41:03.940 回答
0
            <Button
                android:id="@+id/btnregister"
                android:layout_width="150dp"
                android:layout_height="45dp"
                android:layout_gravity="center"
                android:layout_marginHorizontal="10dp"
                android:layout_marginVertical="20dp"
                android:paddingVertical="5dp"
                style="@style/btn_register"
                android:text="Register"
                android:textColor="#FFFFFF" />

在 Styles.xml 文件中应用以下代码:

 <style name="btn_register">
        <item name="android:layout_marginTop">15dp</item>
        <item name="android:backgroundTint">#009688</item>
        <item name="cornerRadius">20dp</item>
    </style>
于 2020-05-28T02:59:36.077 回答
-1

你不能使用setBackground(). 此方法在您的 Android 级别中可能不可用。

于 2013-09-01T14:49:45.730 回答