Để đặt Nền:
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Là cách tốt nhất để làm điều đó?
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Là cách tốt nhất để làm điều đó?
Câu trả lời:
layout.setBackgroundResource(R.drawable.ready);
đúng.
Một cách khác để đạt được nó là sử dụng như sau:
final int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready) );
} else {
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
}
Nhưng tôi nghĩ vấn đề xảy ra bởi vì bạn đang cố tải những hình ảnh lớn.
Đây là một hướng dẫn tốt làm thế nào để tải bitmap lớn.
CẬP NHẬT:
getDrawable (int) không dùng nữa trong API cấp 22
getDrawable(int )
hiện không được chấp nhận ở cấp API 22. Thay vào đó, bạn nên sử dụng mã sau từ thư viện hỗ trợ:
ContextCompat.getDrawable(context, R.drawable.ready)
Nếu bạn tham khảo mã nguồn của ContextCompat.getDrawable , nó sẽ cung cấp cho bạn một cái gì đó như thế này:
/**
* Return a drawable object associated with a particular resource ID.
* <p>
* Starting in {@link android.os.Build.VERSION_CODES#LOLLIPOP}, the returned
* drawable will be styled for the specified Context's theme.
*
* @param id The desired resource identifier, as generated by the aapt tool.
* This integer encodes the package, type, and resource entry.
* The value 0 is an invalid identifier.
* @return Drawable An object that can be used to draw this resource.
*/
public static final Drawable getDrawable(Context context, int id) {
final int version = Build.VERSION.SDK_INT;
if (version >= 21) {
return ContextCompatApi21.getDrawable(context, id);
} else {
return context.getResources().getDrawable(id);
}
}
Thêm chi tiết về ContextCompat
Kể từ API 22, bạn nên sử dụng getDrawable(int, Theme)
phương thức thay vì getDrawable (int).
CẬP NHẬT:
Nếu bạn đang sử dụng thư viện v4 hỗ trợ, những điều sau đây sẽ đủ cho tất cả các phiên bản.
ContextCompat.getDrawable(context, R.drawable.ready)
Bạn sẽ cần thêm các mục sau trong ứng dụng build.gradle của bạn
compile 'com.android.support:support-v4:23.0.0' # or any version above
Hoặc sử dụng ResourceCompat, trong bất kỳ API nào như bên dưới:
import android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);
if(buttonBackground.equals(R.drawable.myDrawable))
nơi Drawable buttonBackground = myButton.getBackground();
tôi gặp lỗi này: snag.gy/weYgA.jpg
myActivity.getTheme()
phiên bản mới nhất của phương thức, thay vì tham số null:myView.setBackground( getResources().getDrawable(R.drawable.my_background, activity.getTheme()));
AppCompatResources.getDrawable(this.getContext(), resId)
thay vào đó, Google đã triển khai nó trong AppCompat*
widget / view, ví dụ:android.support.v7.widget.AppCompatCheckBox
Thử cái này:
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
và cho API 16 <:
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));
getResources().getDrawable()
. Mã chính xác layout.setBackgroundResource(R.drawable.ready);
giống như OP được sử dụng. Vấn đề ở đây xuất phát từ kích thước của bitmap.
RelativeLayout relativeLayout; //declare this globally
bây giờ, bên trong bất kỳ chức năng nào như onCreate, onResume
relativeLayout = new RelativeLayout(this);
relativeLayout.setBackgroundResource(R.drawable.view); //or whatever your image is
setContentView(relativeLayout); //you might be forgetting this
Bạn cũng có thể đặt nền của bất kỳ Hình ảnh nào:
View v;
Drawable image=(Drawable)getResources().getDrawable(R.drawable.img);
(ImageView)v.setBackground(image);
(.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
mã bên trong
Tôi đang sử dụng minSdkVersion 16 và targetSdkVersion 23.
Phần sau đây hoạt động với tôi, nó sử dụng
ContextCompat.getDrawable(context, R.drawable.drawable);
Thay vì sử dụng:
layout.setBackgroundResource(R.drawable.ready);
Thay vì sử dụng:
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
getActivity()
được sử dụng trong một đoạn, nếu gọi từ một hoạt động sử dụng this
.
Nếu nền của bạn đang ở trong thư mục drawable ngay bây giờ, hãy thử di chuyển các hình ảnh từ thư mục drawable-gậtpi trong dự án của bạn. Điều này làm việc cho tôi, dường như những hình ảnh khác được tự chỉnh lại ..
Sử dụng butterknife để liên kết tài nguyên có thể rút ra với một biến bằng cách thêm tài nguyên này vào đầu lớp của bạn (trước bất kỳ phương thức nào).
@Bind(R.id.some_layout)
RelativeLayout layout;
@BindDrawable(R.drawable.some_drawable)
Drawable background;
sau đó bên trong một trong các phương thức của bạn thêm
layout.setBackground(background);
Đó là tất cả những gì bạn cần
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.ready));
else if(android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1)
layout.setBackground(getResources().getDrawable(R.drawable.ready));
else
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
Hãy thử ViewCompat.setBackground(yourView, drawableBackground)
thử cái này.
int res = getResources().getIdentifier("you_image", "drawable", "com.my.package");
preview = (ImageView) findViewById(R.id.preview);
preview.setBackgroundResource(res);
setBackground(getContext().getResources().getDrawable(R.drawable.green_rounded_frame));
Bên trong ứng dụng / res / your_xml_layout_file .xml
remoteViews.setInt(R.id.btn_start,"setBackgroundResource", R.drawable.ic_button_start);