android 按钮.setBackground(可绘制背景)抛出NoSuchMethodError

km0tfn4u  于 2023-02-06  发布在  Android
关注(0)|答案(6)|浏览(136)

我正在实现一个简单的方法,通过编程将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);
}
0h4hbjxa

0h4hbjxa1#

您可能在级别低于16(Jelly Bean)的API上进行测试。
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);
g6ll5ycj

g6ll5ycj2#

要为视图创建同质背景,可以创建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);
w8biq8rn

w8biq8rn3#

由于在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));
}
ccrfmcuu

ccrfmcuu4#

<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>
qgelzfjb

qgelzfjb5#

将主题从Theme.MaterialComponents更改为Theme.AppCompat

xesrikrc

xesrikrc6#

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

相关问题