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

Отже, як би ви з цим впоралися?


Ви отримуєте помилку чи попередження?
Брайан Гербст,

яке значення має версія min sdk у маніфесті?
Манмохан Бадая

4
використовувати setbackgroundresource (R.drawable.img_wstat_tstorm); для вищої версії. setBackgroundDrawable відмінено у вищій версії, ця надія допоможе вам
prakash

Мінімальний 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()попередній 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), що не підлягає малюванню. Спробуйте це:

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


setBackground очікує лише Drawable Id
SweetWisher

Ви неправильні. З документів API: android.view.View.setBackground (фон, що малюється); Параметри: background Малюнок, який можна використовувати як фон, або null для видалення фону.
Девід С Адамс,


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)

Якщо ви включите параметр Тема.


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

-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.