setBackgroundDrawable () không được dùng nữa


86

Vì vậy, sdk của tôi chuyển từ 15 thành 21 và khi tôi gọi setBackgroundDrawable(), Android Studio cho tôi biết rằng nó không được dùng nữa.

Tôi đã nghĩ đến việc sử dụng:

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

Nhưng sau đó, tôi gặp lỗi tại "setBackground ()".

Vì vậy, bạn sẽ giải quyết nó như thế nào?


Bạn có gặp lỗi hoặc cảnh báo không?
Bryan Herbst

bạn có giá trị gì của phiên bản min sdk trong tệp kê khai?
Manmohan Badaya

4
sử dụng setbackgroundresource (R.drawable.img_wstat_tstorm); cho cao version.setBackgroundDrawable được depricated trong verion cao hơn, hy vọng điều này giúp bạn
Prakash

Sdk tối thiểu là 15. Tôi có gạch chân "setBackground ()" màu đỏ nhưng Ứng dụng vẫn chạy nên tôi đoán đó là một cảnh báo
Makoto

Bạn phải nhận được Thêm @SupressWarning
SweetWisher ツ

Câu trả lời:


105

Đó là một chủ đề thú vị. Rõ ràng là cách bạn đang làm là đúng. Nó thực sự chỉ là một sự thay đổi quyết định đặt tên. Như câu trả lời này chỉ ra, setBackground()chỉ cần gọi setBackgroundDrawable():

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

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

Bạn có thể xem chủ đề này để biết thêm thông tin về tất cả những điều này.


20
Bạn nên lưu ý rằng setBackground()sẽ không làm việc cho API16 trước, một sự thay thế có thể làsetBackgroundResource
Mood

26

có thể bạn có thể thử những cách sau:

setBackgroundResource(R.drawable.img_wstat_tstorm);

18

Thật buồn cười vì phương pháp đó không còn được dùng nữa, nhưng nếu bạn nhìn vào Mã nguồn Android, bạn sẽ thấy điều này:

   /**
     * 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

Chính xác kể từ ngày 15 tháng 8 năm 2018

Sử dụng các thư viện hỗ trợ

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

7

Bạn đang gặp lỗi vì getResources (). GetDrawable () lấy id (int) không phải là đối số có thể kéo được. Thử đi:

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


setBackground chỉ mong đợi Drawable Id
SweetWisher ツ

Bạn không chính xác. Từ tài liệu API: android.view.View.setBackground (Nền có thể vẽ); Các thông số: background Có thể vẽ để sử dụng làm nền hoặc null để xóa nền.
David C Adams

4

Dùng cái này:

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

Điều này đúng trong trường hợp của tôi Giải quyết vấn đề này

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

1

Chính xác kể từ ngày 23 tháng 11 năm 2018

Kotlin:

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

Nếu bạn bao gồm thông số Chủ đề.


0

Tôi đang sử dụng minSdkVersion 16 và targetSdkVersion 23 Phần sau đang hoạt động với tôi, nó sử dụng ContextCompat.getDrawable (context, R.drawable.drawable);

Thay vì sử dụng: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

Thay vì sử dụng:

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

getActivity() được sử dụng trong một phân đoạn, nếu gọi từ một hoạt động sử dụng this


Câu hỏi được hỏi cho minSdk 15
Harish Gyanani

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

Nó thực sự sẽ giúp đỡ nếu bạn muốn quấn lên trong một vài từ những gì bạn đang cố gắng làm ở đây ...
arkascha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.