我正在实现一种简单的方法,以编程方式将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);
}
答案 0 :(得分:34)
您可能正在测试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);
答案 1 :(得分:1)
要为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);
答案 2 :(得分: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));
}
答案 3 :(得分: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>
答案 4 :(得分:-1)
您无法使用setBackground()
。
您的Android级别可能无法使用此方法。