setBackgroundDrawable () เลิกใช้แล้ว


89

ดังนั้น 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 ()"

แล้วคุณจะจัดการกับมันอย่างไร?


คุณได้รับข้อผิดพลาดหรือคำเตือนหรือไม่?
Bryan Herbst

คุณมีค่าอะไรบ้างของเวอร์ชัน min sdk ในไฟล์ Manifest?
Manmohan Badaya

4
ใช้ setbackgroundresource (R.drawable.img_wstat_tstorm); สำหรับเวอร์ชันที่สูงกว่า setBackgroundDrawable ถูกตัดทอนในเวอร์ชันที่สูงขึ้นหวังว่านี่จะช่วยคุณได้
prakash

SDK ขั้นต่ำคือ 15 ฉันมี "setBackground ()" ที่ขีดเส้นใต้เป็นสีแดง แต่แอปทำงานดังนั้นฉันคิดว่ามันเป็นคำเตือน
Makoto

คุณต้องได้รับAdd @SupressWarning
SweetWisher ツ

คำตอบ:


105

เป็นหัวข้อที่น่าสนใจ วิธีที่คุณทำนั้นถูกต้องชัดเจน แท้จริงแล้วเป็นเพียงการเปลี่ยนแปลงการตัดสินใจในการตั้งชื่อ ตามที่คำตอบนี้ชี้ให้เห็นsetBackground()เพียงโทรsetBackgroundDrawable():

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

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

คุณสามารถดูหัวข้อนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับทั้งหมดนี้


20
คุณควรทราบว่าsetBackground()จะใช้ไม่ได้กับ API16 ก่อนหน้าอาจเป็นทางเลือกอื่นsetBackgroundResource
Mood


18

เป็นเรื่องตลกเพราะเลิกใช้วิธีนี้แล้ว แต่ถ้าคุณดูซอร์สโค้ด 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);
    }

12

แก้ไข ณ วันที่ 15 สิงหาคม 2561

ใช้ไลบรารีสนับสนุน

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

8

คุณได้รับข้อผิดพลาดเนื่องจาก getResources (). getDrawable () ใช้ id (int) ที่ไม่สามารถดึงได้เป็นอาร์กิวเมนต์ ลองสิ่งนี้:

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


setBackground คาดว่าDrawable Id เท่านั้น
SweetWisher ツ

คุณไม่ถูกต้อง จากเอกสาร API: android.view.View.setBackground (พื้นหลังที่วาดได้); พารามิเตอร์: พื้นหลัง Drawable เพื่อใช้เป็นพื้นหลังหรือโมฆะเพื่อลบพื้นหลัง
David C Adams



2

นี่ถูกต้องในกรณีของฉันแก้ไขปัญหานี้

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


0

ฉันใช้ minSdkVersion 16 และ targetSdkVersion 23 สิ่งต่อไปนี้ใช้งานได้สำหรับฉันมันใช้ ContextCompat.getDrawable (บริบท, R.drawable.drawable);

แทนที่จะใช้: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

ค่อนข้างใช้:

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

getActivity() ถูกใช้ในส่วนถ้าเรียกจากกิจกรรมใช้ this


ถามคำถาม minSdk 15
Harish Gyanani

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

มันจะช่วยได้จริงๆถ้าคุณจะสรุปสิ่งที่คุณกำลังพยายามทำที่นี่ ...
arkascha
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.