setBackgroundDrawable () устарел

Итак, мой 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 ()".

Итак, как бы вы с этим справились?


person Makoto    schedule 26.11.2014    source источник
comment
Вы получаете сообщение об ошибке или предупреждение?   -  person Bryan Herbst    schedule 26.11.2014
comment
Какое значение имеет минимальная версия sdk в манифесте?   -  person Manmohan Badaya    schedule 26.11.2014
comment
используйте setbackgroundresource (R.drawable.img_wstat_tstorm); для более высокой версии. setBackgroundDrawable является устаревшим в более высокой версии, эта надежда поможет вам   -  person prakash    schedule 26.11.2014
comment
Минимальный sdk равен 15. У меня setBackground () подчеркнут красным, но приложение работает, так что я думаю, это предупреждение.   -  person Makoto    schedule 26.11.2014
comment
Вы должны получить Добавить @SupressWarning   -  person SweetWisher ツ    schedule 26.11.2014


Ответы (10)


Это интересная тема. Видимо, то, как вы это делаете, правильно. На самом деле это просто изменение решения об именовании. Как указано в этом ответе, setBackground() просто вызывает setBackgroundDrawable():

public void setBackground(Drawable background) {
    //noinspection deprecation
    setBackgroundDrawable(background);
}

@Deprecated
public void setBackgroundDrawable(Drawable background) { ... }

Дополнительную информацию обо всем этом можно найти в этой ветке.

person Alex K    schedule 26.11.2014
comment
Обратите внимание, что setBackground() не будет работать для pre API16, альтернативой может быть setBackgroundResource - person Mood; 04.08.2015

возможно, вы можете попробовать следующее:

setBackgroundResource(R.drawable.img_wstat_tstorm);
person hedgehog    schedule 20.04.2015

Забавно, потому что этот метод устарел, но если вы посмотрите исходный код 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);
    }
person Joaquin Iurchuk    schedule 30.01.2015

Верно по состоянию на 15 августа 2018 г.

Используйте библиотеки поддержки

Drawable drawable = ResourcesCompat.getDrawable(getResources(), drawableRes, null);
ViewCompat.setBackground(layout, drawable);
person Stuart Campbell    schedule 15.08.2018

Вы получаете сообщение об ошибке, потому что getResources (). GetDrawable () принимает в качестве аргумента идентификатор (int), а не drawable. Попробуй это:

layout.setBackground(getResources().getDrawable(R.id.img_wstat_tstorm));

person David C Adams    schedule 26.11.2014
comment
setBackground ожидает только Drawable Id - person SweetWisher ツ; 26.11.2014
comment
Вы не правы. Из документации API: android.view.View.setBackground (Drawable background); Параметры: background Drawable для использования в качестве фона или null для удаления фона. - person David C Adams; 26.11.2014

Использовать этот:

myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)
person Malwinder Singh    schedule 02.12.2019

В моем случае это правильно. Решите эту проблему.

 imageView.setBackgroundResource(images[productItem.getPosition()]);
person Sonu Kumar    schedule 12.04.2016

Верно по состоянию на 23 ноября 2018 г.

Котлин:

view.background = resources.getDrawable(R.drawable.ic_image,theme)

Если вы включите параметр Theme.

person Dimitri de Jesus    schedule 23.11.2018

Я использую 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

person Vostro    schedule 30.03.2016
comment
Вопрос задан для minSdk 15 - person Harish Gyanani; 09.11.2016

person    schedule
comment
Было бы неплохо, если бы вы в двух словах обрисовали то, что пытаетесь здесь сделать ... - person arkascha; 08.10.2017