2012-10-25 28 views
5

Phương pháp setBackgroundDrawable() của lớp View đó lúc này đã bị phản đối ở mức API Android SDK 16.Giải pháp cho setBackgroundDrawable trên Android?

Phương pháp mới là setBackground() nhưng tất nhiên nó chỉ có sẵn trong API 16.

Làm thế nào tôi có thể workaround nó nếu tôi muốn ứng dụng của tôi tương thích với các cấp API trước đây? (ít nhất API 14)

Mục tiêu là loại bỏ mọi cảnh báo và @SupressWarnings không phải là giải pháp cho tôi.

+0

Bạn đã thử chú thích '@TargetApi' chưa? (Dường như chính Lint gợi ý như vậy) – sandrstar

+0

@SuppressWarnings * là * giải pháp. Nếu bạn đang nhắm mục tiêu API 14 và bạn không cần bất kỳ chức năng nào của API mới, thì hãy gọi API cũ hơn và ngăn chặn cảnh báo là điều đúng đắn cần làm. –

Trả lời

15

Cách thông thường là một trong những điều này:

if (android.os.Build.VERSION.SDK_INT >= 16) 
    setBackground(...); 
else 
    setBackgroundDrawable(...); 

Mặt khác bạn có thể sử dụng phản xạ:

try { 
    Method setBackground = View.class.getMethod("setBackground", Drawable.class); 
    setBackground.invoke(myView, myDrawable); 
} catch (NoSuchMethodException e) { 
    setBackgroundDrawable(myDrawable); 
} 

IMO một cảnh báo là tốt hơn so với việc phải bắt một ngoại lệ và một sự phản ánh không cần thiết.

+1

và do đó có thể sử dụng @SupressWarning trong mệnh đề khác? – Alexis

+1

Tôi đã thêm một cách thứ hai để giải quyết vấn đề của bạn thông qua phản xạ. – keyboardsurfer

+2

Không có lý do gì để thêm hai đường dẫn mã. Chỉ cần gọi phương thức không được chấp nhận trừ khi mục tiêu của bạn là 16+ hoặc bạn thực sự cần chức năng trong API mới. –

3

Bạn có thể sử dụng

viewobj.setBackgroundResource(drawble_object); 
0

Thiết bitmap để ImageView.

ImageView imageView = (ImageView) findViewById (R.id.imageSlice4); imageSlice4.setBackground (bitmapDrawable mới (getResources(), slicedImagesArrayList.get (3)));

Các vấn đề liên quan