setBackgroundDrawable () tidak digunakan lagi

89

Jadi SDK saya berubah dari 15 menjadi 21 dan ketika saya menelepon setBackgroundDrawable(), Android Studio memberi tahu saya bahwa itu sudah usang.

Saya berpikir untuk memutarnya menggunakan:

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

Tapi kemudian, saya mendapatkan kesalahan di "setBackground ()".

Jadi, bagaimana Anda menghadapinya?

Makoto
sumber
Apakah Anda mendapatkan kesalahan atau peringatan?
Bryan Herbst
nilai apa yang Anda miliki dari versi min sdk dalam manifes?
Manmohan Badaya
4
gunakan setbackgroundresource (R.drawable.img_wstat_tstorm); untuk versi yang lebih tinggi. setBackgroundDrawable dihapus dalam versi yang lebih tinggi, harap ini membantu Anda
prakash
Min sdk adalah 15. Saya memiliki "setBackground ()" yang digarisbawahi dengan warna merah tetapi Aplikasi berjalan jadi saya kira itu peringatan
Makoto
Anda harus mendapatkan Add @SupressWarning
SweetWisher ツ

Jawaban:

105

Itu topik yang menarik. Cara Anda melakukannya ternyata benar. Ini sebenarnya hanya perubahan keputusan penamaan. Seperti yang ditunjukkan jawaban ini , setBackground()panggil saja setBackgroundDrawable():

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

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

Anda dapat melihat utas ini untuk informasi lebih lanjut tentang semua ini.

Alex K
sumber
20
Anda harus mencatat bahwa setBackground()itu tidak akan berfungsi untuk pra API16, alternatifnya bisa jadisetBackgroundResource
Suasana hati
26

mungkin Anda bisa mencoba yang berikut ini:

setBackgroundResource(R.drawable.img_wstat_tstorm);
landak
sumber
18

Itu lucu karena metode itu sudah usang, tetapi jika Anda melihat Kode Sumber Android Anda akan menemukan ini:

   /**
     * 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);
    }
Joaquin Iurchuk
sumber
12

Dikoreksi per 15 Agustus 2018

Gunakan perpustakaan dukungan

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

Anda mendapatkan kesalahan karena getResources (). GetDrawable () menggunakan id (int) bukan drawable sebagai argumennya. Coba ini:

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

David C Adams
sumber
setBackground mengharapkan Drawable Id saja
SweetWisher ツ
Anda salah. Dari dokumen API: android.view.View.setBackground (Latar belakang dapat digambar); Parameters: background Drawable untuk digunakan sebagai latar belakang, atau null untuk menghapus latar belakang.
David C Adams
5

Gunakan ini:

myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)
Malwinder Singh
sumber
3
//Java
view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg))

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)
Eliasz Kubala
sumber
2

Ini benar dalam kasus saya. Selesaikan masalah ini

 imageView.setBackgroundResource(images[productItem.getPosition()]);
Sonu Kumar
sumber
1

Dikoreksi per 23 November 2018

Kotlin:

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

Jika Anda menyertakan parameter Tema.

Dimitri de Jesus
sumber
0

Saya menggunakan minSdkVersion 16 dan targetSdkVersion 23 Berikut ini bekerja untuk saya, menggunakan ContextCompat.getDrawable (konteks, R.drawable.drawable);

Daripada menggunakan: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

Lebih suka digunakan:

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

getActivity() digunakan dalam fragmen, jika dipanggil dari penggunaan aktivitas this

Vostro
sumber
Pertanyaan diajukan untuk minSdk 15
Harish Gyanani
-1
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem));
        getSupportActionBar().setBackgroundDrawable(background);
Vando Sep
sumber
Akan sangat membantu jika Anda menyimpulkan dalam beberapa kata apa yang Anda coba lakukan di sini ...
arkascha