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);
}
Ответы
Ответ 1
Возможно, вы тестируете API ниже уровня 16 (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);
Ответ 2
Чтобы создать однородный фон для представления, вы можете создать ресурс с возможностью рисования формы типа и использовать его с помощью 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);
Ответ 3
Так как после 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));
}
Ответ 4
Вы не можете использовать setBackground()
.
Этот метод может быть недоступен на вашем уровне Android.