ฉันมีภาพres/drawable/test.png
(R.drawable.test)
ฉันต้องการที่จะผ่านภาพนี้เพื่อฟังก์ชั่นที่ยอมรับเช่นDrawable
mButton.setCompoundDrawables()
ดังนั้นฉันจะแปลงทรัพยากรรูปภาพเป็นDrawable
อย่างไร
ฉันมีภาพres/drawable/test.png
(R.drawable.test)
ฉันต้องการที่จะผ่านภาพนี้เพื่อฟังก์ชั่นที่ยอมรับเช่นDrawable
mButton.setCompoundDrawables()
ดังนั้นฉันจะแปลงทรัพยากรรูปภาพเป็นDrawable
อย่างไร
คำตอบ:
กิจกรรมของคุณควรมีเมธอด getResources ทำ:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
รหัสนี้เลิกใช้แล้ว:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
ใช้สิ่งนี้แทน:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(โดยที่ param ที่ 3 เป็นอินสแตนซ์ Theme ที่เป็นตัวเลือก)
getDrawable (int id)
วิธีการคิดค่าเสื่อมราคา ณ วันที่ 22 API
แต่คุณควรใช้getDrawable (int id, Resources.Theme theme)
สำหรับ API 21+
รหัสจะมีลักษณะเช่นนี้
Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
myDrawable = context.getResources().getDrawable(id);
}
getResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
ฉันแค่อยากจะเพิ่มว่าถ้าคุณได้รับข้อความ "เลิก" เมื่อใช้ getDrawable (... ) คุณควรใช้วิธีการต่อไปนี้จากห้องสมุดสนับสนุนแทน
ContextCompat.getDrawable(getContext(),R.drawable.[name])
คุณไม่จำเป็นต้องใช้ getResources () เมื่อใช้วิธีนี้
นี่เทียบเท่ากับการทำอะไรบางอย่าง
Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
mDrawable = getResources().getDrawable(R.id.[name]);
}
ใช้ได้ทั้งเวอร์ชั่น Lollipop ทั้งก่อนและหลัง
รับ Drawable จากทรัพยากรเวกเตอร์ไม่ว่าจะเป็นเวกเตอร์หรือไม่:
AppCompatResources.getDrawable(context, R.drawable.icon);
หมายเหตุ:
ContextCompat.getDrawable(context, R.drawable.icon);
จะผลิตandroid.content.res.Resources$NotFoundException
สำหรับทรัพยากรเวกเตอร์
หากคุณพยายามดึงภาพออกมาจากมุมมองที่ตั้งค่ารูปภาพไว้
ivshowing.setBackgroundResource(R.drawable.one);
จากนั้น drawable จะส่งกลับเฉพาะค่า Null ด้วยรหัสต่อไปนี้ ...
Drawable drawable = (Drawable) ivshowing.getDrawable();
ดังนั้นจะเป็นการดีกว่าถ้าคุณตั้งค่ารูปภาพด้วยรหัสต่อไปนี้หากคุณต้องการดึงข้อมูล drawable จากมุมมองเฉพาะ
ivshowing.setImageResource(R.drawable.one);
เท่านั้นเราจะทำการเปลี่ยนแปลงได้อย่างแน่นอน
หากคุณกำลังสืบทอดจากแฟรกเมนต์คุณสามารถทำได้:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)