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.