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.