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



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

594   9  

9 ответов:

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

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

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

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

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

setBackgroundResource(R.drawable.img_wstat_tstorm);

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

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

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

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

использовать библиотеки поддержки

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

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

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

Я использую 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() используется во фрагменте, если вызов из действия use this

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

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem));
        getSupportActionBar().setBackgroundDrawable(background);

Comments

    Ничего не найдено.