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?


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.


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

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

12

Dikoreksi per 15 Agustus 2018

Gunakan perpustakaan dukungan

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

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


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)

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

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)

2

Ini benar dalam kasus saya. Selesaikan masalah ini

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

1

Dikoreksi per 23 November 2018

Kotlin:

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

Jika Anda menyertakan parameter Tema.


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


Pertanyaan diajukan untuk minSdk 15
Harish Gyanani

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

Akan sangat membantu jika Anda menyimpulkan dalam beberapa kata apa yang Anda coba lakukan di sini ...
arkascha
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.