setBackgroundDrawable () kullanımdan kaldırıldı


89

Yani sdk'm 15'ten 21'e gidiyor ve aradığımda setBackgroundDrawable()Android Studio artık kullanımdan kaldırıldığını söylüyor.

Kullanarak dolaşmayı düşündüm:

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));
}

Ama sonra "setBackground ()" da bir hata alıyorum.

Peki bununla nasıl başa çıkacaksınız?


Bir hata mı yoksa uyarı mı alıyorsunuz?
Bryan Herbst

manifest'te min sdk sürümünün değeri nedir?
Manmohan Badaya

4
setbackgroundresource (R.drawable.img_wstat_tstorm) kullanın; daha yüksek sürüm için. setBackgroundDrawable daha yüksek sürümde depricated, bu umut size yardımcı olur
prakash

En az sdk 15'tir. Kırmızı ile altı çizilmiş "setBackground ()" var ama Uygulama çalışıyor bu yüzden sanırım bu bir uyarı
Makoto

Add @SupressWarning
SweetWisher ツ

Yanıtlar:


105

Bu ilginç bir konu. Görünüşe göre, bunu yapma şeklin doğru. Aslında sadece bir adlandırma kararı değişikliğidir. Bu cevabın işaret ettiği gibi , setBackground()sadece ararlar setBackgroundDrawable():

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

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

Tüm bunlar hakkında daha fazla bilgi için bu konuyu görebilirsiniz .


20
Bunun setBackground()API16 öncesi için işe yaramayacağını unutmayın , bir alternatif olabilirsetBackgroundResource
Mood

26

belki aşağıdakileri deneyebilirsiniz:

setBackgroundResource(R.drawable.img_wstat_tstorm);

18

Komik çünkü bu yöntem kullanımdan kaldırıldı, ancak Android Kaynak Koduna bakarsanız şunu bulacaksınız:

   /**
     * 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 Ağustos 2018 itibarıyla doğrudur

Destek kitaplıklarını kullanın

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

8

Bir hata alıyorsunuz çünkü getResources (). GetDrawable (), argüman olarak çekilebilir değil bir id (int) alıyor. Bunu dene:

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


setBackground yalnızca Drawable Id'i bekliyor
SweetWisher ツ

Yanılıyorsun API belgelerinden: android.view.View.setBackground (Çizilebilir arka plan); Parametreler: arka plan Arka plan olarak kullanılacak Çekilebilir veya arka planı kaldırmak için boş.
David C Adams

5

Bunu kullan:

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

Benim durumumda bu doğru Bu sorunu çöz

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

1

23 Kasım 2018 itibarıyla doğrudur

Kotlin:

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

Tema parametresini eklerseniz.


0

Bir minSdkVersion 16 ve targetSdkVersion 23 kullanıyorum Aşağıdakiler benim için çalışıyor, ContextCompat.getDrawable (bağlam, R.drawable.drawable) kullanıyor;

Kullanmak yerine: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

Bunun yerine kullanım:

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

getActivity() bir etkinlikten arama yapılıyorsa, bir parçada kullanılır this


MinSdk 15
Harish Gyanani

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

Burada yapmaya çalıştığınız şeyi birkaç kelimeyle
özetleseniz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.