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 для удаления фона.
Дэвид Си Адамс,
4

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

myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)
Малвиндер Сингх
источник
3
//Java
view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg))

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)
Элиаш Кубала
источник
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);
Вандо Сеп
источник
Было бы здорово, если бы вы в
двух