Итак, мой sdk меняется с 15 до 21, и когда я звоню setBackgroundDrawable()
, Android Studio сообщает мне, что он устарел.
Я подумал обойти это, используя:
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.img_wstat_tstorm));
} else {
layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));
}
Но затем я получаю сообщение об ошибке "setBackground ()".
Итак, как бы вы с этим справились?
Ответы:
Это интересная тема. Видимо, вы делаете это правильно. На самом деле это просто изменение решения об именовании. Как указывает этот ответ ,
setBackground()
просто вызываетsetBackgroundDrawable()
:public void setBackground(Drawable background) { //noinspection deprecation setBackgroundDrawable(background); } @Deprecated public void setBackgroundDrawable(Drawable background) { ... }
Вы можете увидеть эту ветку для получения дополнительной информации обо всем этом.
источник
setBackground()
не будет работать для pre API16, альтернативой может бытьsetBackgroundResource
возможно, вы можете попробовать следующее:
setBackgroundResource(R.drawable.img_wstat_tstorm);
источник
Забавно, потому что этот метод устарел, но если вы посмотрите исходный код Android, вы обнаружите следующее:
/** * Set the background to a given Drawable, or remove the background. If the * background has padding, this View's padding is set to the background's * padding. However, when a background is removed, this View's padding isn't * touched. If setting the padding is desired, please use * {@link #setPadding(int, int, int, int)}. * * @param background The Drawable to use as the background, or null to remove the * background */ public void setBackground(Drawable background) { //noinspection deprecation setBackgroundDrawable(background); }
источник
Верно по состоянию на 15 августа 2018 г.
Используйте библиотеки поддержки
Drawable drawable = ResourcesCompat.getDrawable(getResources(), drawableRes, null); ViewCompat.setBackground(layout, drawable);
источник
Вы получаете сообщение об ошибке, потому что getResources (). GetDrawable () принимает в качестве аргумента идентификатор (int), а не drawable. Попробуй это:
layout.setBackground(getResources().getDrawable(R.id.img_wstat_tstorm));
источник
Использовать это:
myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)
источник
//Java view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg)) //Kotlin view.background = ActivityCompat.getDrawable(context, R.drawable.bg)
источник
В моем случае это правильно. Решите эту проблему.
imageView.setBackgroundResource(images[productItem.getPosition()]);
источник
Верно по состоянию на 23 ноября 2018 г.
Котлин:
Если вы включите параметр Theme.
источник
Я использую minSdkVersion 16 и targetSdkVersion 23 У меня работает следующее: он использует ContextCompat.getDrawable (context, R.drawable.drawable);
Вместо того, чтобы использовать:
layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));
Скорее используйте:
layout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.img_wstat_tstorm));
getActivity()
используется во фрагменте, если вызов из действия, используйтеthis
источник
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem)); getSupportActionBar().setBackgroundDrawable(background);
источник