Подтвердить что ты не робот

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()".

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

setBackgroundResource(R.drawable.img_wstat_tstorm);

Ответ 3

Это забавно, потому что этот метод устарел, но если вы посмотрите на исходный код Android, вы найдете следующее:

   /**
     * Set the background to a given Drawable, or remove the background. If the
     * background has padding, this View padding is set to the background's
     * padding. However, when a background is removed, this View 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);
    }

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Я использую minSdkVersion 16 и targetSdkVersion 23 Для меня работает следующее: ContextCompat.getDrawable(контекст, R.drawable.drawable);

Вместо использования: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

Скорее используйте:

layout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.img_wstat_tstorm));

getActivity() используется в фрагменте, если вы вызываете из использования активности this

Ответ 8

//Java
view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg))

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)

Ответ 9

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

Котлин:

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

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

Ответ 10

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