วิธีตั้งค่าพื้นหลัง:
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
เป็นวิธีที่ดีที่สุดที่จะทำ?
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
เป็นวิธีที่ดีที่สุดที่จะทำ?
คำตอบ:
layout.setBackgroundResource(R.drawable.ready);
ถูกต้อง.
อีกวิธีหนึ่งในการบรรลุเป้าหมายคือใช้สิ่งต่อไปนี้:
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));
}
แต่ฉันคิดว่าปัญหาเกิดขึ้นเพราะคุณกำลังพยายามโหลดภาพขนาดใหญ่
นี่คือวิธีการสอนที่ดีในการโหลดบิตแมปขนาดใหญ่
อัปเดต:
เลิกใช้ getDrawable (int) ในระดับ API 22
getDrawable(int )
ตอนนี้เลิกใช้ในระดับ API 22 คุณควรใช้รหัสต่อไปนี้จากไลบรารีสนับสนุนแทน:
ContextCompat.getDrawable(context, R.drawable.ready)
ถ้าคุณอ้างถึงซอร์สโค้ดของContextCompat.getDrawableมันให้อะไรแบบนี้:
/**
* 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);
}
}
รายละเอียดเพิ่มเติมเกี่ยวกับContextCompat
ในฐานะของ API 22 คุณควรใช้getDrawable(int, Theme)
วิธีการแทน getDrawable (int)
UPDATE:
หากคุณใช้ไลบรารีสนับสนุน v4 ข้อมูลต่อไปนี้จะเพียงพอสำหรับทุกรุ่น
ContextCompat.getDrawable(context, R.drawable.ready)
คุณจะต้องเพิ่มสิ่งต่อไปนี้ในแอป build.gradle ของคุณ
compile 'com.android.support:support-v4:23.0.0' # or any version above
หรือใช้ ResourceCompat ใน API ใด ๆ ดังต่อไปนี้:
import android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);
if(buttonBackground.equals(R.drawable.myDrawable))
ว่าDrawable buttonBackground = myButton.getBackground();
ฉันได้รับข้อผิดพลาดนี้ที่ไหน
myActivity.getTheme()
ใช้วิธีการเวอร์ชันล่าสุดแทนพารามิเตอร์ Null:myView.setBackground( getResources().getDrawable(R.drawable.my_background, activity.getTheme()));
AppCompatResources.getDrawable(this.getContext(), resId)
แทน Google ได้นำไปใช้ในAppCompat*
วิดเจ็ต / มุมมองเช่น:android.support.v7.widget.AppCompatCheckBox
ลองสิ่งนี้:
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
และสำหรับ API 16 <:
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));
getResources().getDrawable()
คุณไม่จำเป็นต้อง รหัสที่ถูกต้องนั้นlayout.setBackgroundResource(R.drawable.ready);
เหมือนกับ OP ที่ใช้ ปัญหาที่นี่มาจากขนาดของบิตแมป
RelativeLayout relativeLayout; //declare this globally
ตอนนี้ภายในฟังก์ชั่นใด ๆ เช่น onCreate, onResume
relativeLayout = new RelativeLayout(this);
relativeLayout.setBackgroundResource(R.drawable.view); //or whatever your image is
setContentView(relativeLayout); //you might be forgetting this
นอกจากนี้คุณยังสามารถกำหนดพื้นหลังของภาพใด ๆ :
View v;
Drawable image=(Drawable)getResources().getDrawable(R.drawable.img);
(ImageView)v.setBackground(image);
(.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
รหัสด้านใน
ฉันใช้ minSdkVersion 16 และ targetSdkVersion 23
ต่อไปนี้ใช้งานได้สำหรับฉันมันใช้
ContextCompat.getDrawable(context, R.drawable.drawable);
แทนที่จะใช้:
layout.setBackgroundResource(R.drawable.ready);
ค่อนข้างใช้:
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
getActivity()
this
ถูกนำมาใช้ในส่วนถ้าโทรมาจากการใช้งานกิจกรรม
หากพื้นหลังของคุณอยู่ในโฟลเดอร์ drawable ในตอนนี้ให้ลองย้ายรูปภาพจากโฟลเดอร์ drawable ไปเป็น drawable-nodpi ในโครงการของคุณ มันใช้งานได้สำหรับฉันดูเหมือนว่าภาพอื่นจะได้รับการช่วยเหลือจากพวกเขา ..
ใช้butterknifeเพื่อโยงรีซอร์ส drawable เข้ากับตัวแปรโดยเพิ่มสิ่งนี้ไว้ที่ด้านบนสุดของคลาส (ก่อนหน้าเมธอดใด ๆ )
@Bind(R.id.some_layout)
RelativeLayout layout;
@BindDrawable(R.drawable.some_drawable)
Drawable background;
จากนั้นภายในหนึ่งในวิธีการของคุณเพิ่ม
layout.setBackground(background);
นั่นคือทั้งหมดที่คุณต้องการ
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));
ลองดู ViewCompat.setBackground(yourView, drawableBackground)
ลองรหัสนี้:
Drawable thumb = ContextCompat.getDrawable(getActivity(), R.mipmap.cir_32);
mSeekBar.setThumb(thumb);
ลองนี้
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));
ภายในแอป / res / your_xml_layout_file .xml
remoteViews.setInt(R.id.btn_start,"setBackgroundResource", R.drawable.ic_button_start);