setBackgroundDrawable () устарел


86

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

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


Вы получаете сообщение об ошибке или предупреждение?
Брайан Хербст

какое значение у вас есть минимальной версии SDK в манифесте?
Manmohan Badaya

4
используйте setbackgroundresource (R.drawable.img_wstat_tstorm); для более высокой версии. setBackgroundDrawable децентрализован в более высокой версии, эта надежда поможет вам
пракаш

Минимальный sdk равен 15. У меня есть «setBackground ()», подчеркнутый красным, но приложение работает, так что я предполагаю, что это предупреждение
Макото

Вы должны получать Add @SupressWarning
SweetWisher ツ

Ответы:


105

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

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

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

Вы можете увидеть эту ветку для получения дополнительной информации обо всем этом.


20
Вы должны отметить, что setBackground()не будет работать для pre API16, альтернативой может бытьsetBackgroundResource
Настроение

26

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

setBackgroundResource(R.drawable.img_wstat_tstorm);

18

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

12

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

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

Drawable drawable = ResourcesCompat.getDrawable(getResources(), drawableRes, null);
ViewCompat.setBackground(layout, drawable);

7

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

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


setBackground ожидает только Drawable Id
SweetWisher ツ

Вы не правы. Из документации API: android.view.View.setBackground (Drawable background); Параметры: background Drawable для использования в качестве фона или null для удаления фона.
Дэвид Си Адамс,



2

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

 imageView.setBackgroundResource(images[productItem.getPosition()]);

1

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

Котлин:

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

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


0

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


Вопрос задан для minSdk 15
Harish Gyanani 09

-1
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem));
        getSupportActionBar().setBackgroundDrawable(background);

Было бы здорово, если бы вы в
двух
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.