รายละเอียด ID ทรัพยากร Android
เรามักจะใช้วิธี FindViewById เพื่อรับทรัพยากร ตัวอย่างเช่นเรามักจะใช้ข้อความดังกล่าวในวิธีการ onCreate:
btnchecked = (imageView) findViewById (r.id.imgcheck);
FindViewById เป็นวิธีที่สะดวกสำหรับเราในการรับวัตถุมุมมองที่หลากหลายในรูปแบบเช่นปุ่ม, ป้ายกำกับ, ListView และ ImageView ตามชื่อหมายถึงมันต้องใช้พารามิเตอร์ int: รหัสทรัพยากร
รหัสทรัพยากรมีประโยชน์มาก Android จะกำหนด ID ให้กับแต่ละทรัพยากรโดยอัตโนมัติที่อยู่ในไดเรกทอรี RES รวมถึงไฟล์รูปภาพต่าง ๆ และวัตถุ "@+id" ในข้อความ XML ไดเรกทอรีย่อยของ Res ได้รับการแก้ไขเกือบตลอดเวลาเช่นที่คุณสามารถเห็นได้ทุกครั้ง: Drawable-Xxxx, เค้าโครง, ค่าและผิดปกติ: Anim, XML, Row, Color
ตำราเรียน Android บอกคุณ:
res/ drawable/ ใช้เพื่อจัดเก็บไฟล์ภาพ;
res/ layout/ ใช้เพื่อจัดเก็บไฟล์นิยามเค้าโครง;
res/ ค่า/ ใช้เพื่อจัดเก็บตัวแปรพารามิเตอร์และไฟล์อื่น ๆ
นี่คือทั้งหมดที่เรารู้อยู่แล้ว นอกจากนี้ Android จะกำหนด ID ให้กับทรัพยากรทั้งหมดในไดเรกทอรี RES และหลักการจัดสรรหลักคือ:
ไฟล์รูปภาพที่สามารถดูได้มักจะเป็นรหัสทรัพยากรหนึ่งรายการต่อไฟล์เสมอ
แต่ละมุมมองในไฟล์ XML ที่ใช้ Android: id =”@+id/xxx” จะถูกกำหนดรหัสทรัพยากรที่ไม่ได้ใช้
บางทีทุกคนอาจเพิ่มกฎที่ซับซ้อนอื่น ๆ
ใน ADK API มีหลายวิธีที่ใช้ ID ทรัพยากรเป็นพารามิเตอร์
ตัวอย่างเช่นวิธี getDrawable:
getResources (). getDrawable (r.drawable.sendsms_bk));
แท้จริงวิธีการ getResources ส่งคืน Android.content.res.Resources Object
วิธีการ GetDrawalbe ส่งคืนวัตถุที่สามารถวาดได้เรารู้ว่านี่เป็นภาพ
พารามิเตอร์ที่ใช้โดยวิธี getDrawable คือรหัสทรัพยากร
อย่างไรก็ตามรหัสทรัพยากร INT เหล่านี้คือตัวเลขใด หรือวางไว้ที่ไหน หากคุณระมัดระวังพอคุณสามารถค้นหาได้ในไฟล์ R.Java ในไดเรกทอรี Gen ID จำนวนเต็มเลขฐานสิบหกมีชื่อแอตทริบิวต์ OO มากพวกเขาทั้งหมดเป็นแบบคงที่สาธารณะสุดท้ายและขอแนะนำให้คุณไม่แก้ไขด้วยตนเอง รหัสทรัพยากรเหล่านี้อยู่ในลำดับชั้นของคลาสที่แตกต่างกัน หากคุณดูอย่างระมัดระวังคุณจะพบกฎบางอย่าง ตัวอย่างเช่นรหัสทรัพยากรในคลาสที่สามารถวาดได้จริงแสดงถึงไฟล์ภาพในไดเรกทอรี Res/Drawable; รหัสทรัพยากรที่มีอยู่ในคลาสเลย์เอาต์จริง ๆ แล้วแสดงถึงไฟล์ XML ในไดเรกทอรี RES/LAYOUT; รหัสทรัพยากรที่มีอยู่ในคลาส ID จริง ๆ แล้วแสดงถึงวัตถุวิดเจ็ตโดยใช้ Android: id = "@+id/xxx" ในไฟล์เลย์เอาต์ XML - แน่นอนถ้าคุณใช้ "@+ยาง/xxx" คลาสที่เรียกว่ายางจะถูกสร้างขึ้นใน R.Java เมื่อรวบรวม
ผ่านความเข้าใจข้างต้นเราพบว่า ID ทรัพยากรเป็นตัวแปรหรือคุณสมบัติที่เริ่มต้นด้วย "R. " - เพราะมันถูกกำหนดไว้ในคลาส R - คลาสนี้ไม่เหมือนกับ R Android.r และพวกเขาไม่ได้อยู่ในระดับแพ็คเกจเดียวกัน อดีตกำหนดทรัพยากรของกรอบ Android เช่น: Android.r.layout.simple_expandable_list_item_1, Android.r.layout.simple_expandable_list_item_2 คุณใช้ทรัพยากรเหล่านี้หรือไม่? หากคุณมีเวลาคุณอาจลองดู R อื่น ๆ คือ R ของเราเองซึ่งกำหนดรหัสทรัพยากรของเราเอง เราสามารถใช้รหัสทรัพยากรใน R.xxx.yy.yy ที่มุ่งเน้นวัตถุและแน่นอนว่าเราสามารถใช้โดยตรงกับตัวเลขเลขฐานสิบหก
ID ทรัพยากรมีความสำคัญใน Android ดังนั้นเราจึงสามารถรับทรัพยากรได้ตราบใดที่เราได้รับรหัสทรัพยากร เนื่องจากในบางกรณีเราไม่สามารถใช้ค่าคงที่เป็น ID ทรัพยากร (เนื่องจากเราต้องการแทนที่ด้วยตัวแปร) เราสามารถรับรหัสทรัพยากรได้ในสองวิธีเท่านั้น:
1. ภาพสะท้อน
การสะท้อนของ Java นั้นทรงพลังมากจนเราคิดถึงมันเสมอเมื่อเราหมดหวัง มาดูรหัสชิ้นหนึ่ง:
ลอง {ฟิลด์ฟิลด์ = r.drawable.class.getfield (ประเภท); int i = field.getInt (ใหม่ r.drawable ()); log.d (แท็ก, i+""); return i;} catch (exception e) {log.e (tag, e.toString ()); ส่งคืน r.drawable.unknow;}ประเภทเป็นตัวแปรและค่าที่เป็นไปได้จะเป็น "ปิด", "แก้ไข", "ไอคอน" ฯลฯ เราใช้ฟิลด์คลาสสะท้อนแสงของ Java เพื่อเข้าถึงฟิลด์ด้านล่างคลาส R.Drawable ในความเป็นจริงเรารู้ว่าฟิลด์ภายใต้ R.Drawable เป็นรหัสทรัพยากรของไฟล์รูปภาพในไดเรกทอรี Res.Drawable-XXXX ดังนั้นการเรียกใช้รหัสด้านบนจึงเป็นจริงเพื่อรับรหัสทรัพยากรของไฟล์รูปภาพที่เกี่ยวข้องผ่านสตริง ตัวอย่างเช่นเมื่อค่าของประเภทคือ "ไอคอน" รหัสด้านบนจะได้รับ ID ทรัพยากรของไฟล์ภาพไอคอน PNG ในไดเรกทอรี Res.Drawable-XXXX และส่งคืนให้เรา เป็นเรื่องธรรมดาที่เราจะแสดงภาพใน ImageView ผ่านรหัสทรัพยากร
2. ใช้วิธี getIdentifier ของคลาสทรัพยากร
การใช้การสะท้อนยังคงเป็นเรื่องยุ่งยาก หากคุณใช้คลาส Android.content.res.resources เพื่อทำสิ่งเดียวกันมันเป็นเพียงสองประโยค:
ทรัพยากร res = getResources (); return res.getIdentifier (พิมพ์ "drawable", getPackagename ());
วิธีการ getResources มาจาก contextxt (นั่นคือคลาสกิจกรรม) ซึ่งสามารถส่งคืนวัตถุทรัพยากรโดยตรง วิธี GetIdentifier ของทรัพยากรสามารถส่งคืนรหัสทรัพยากรใด ๆ ใน R.Java แน่นอนคุณต้องระบุ 3 พารามิเตอร์: ชื่อฟิลด์ชื่อคลาสและชื่อแพ็คเกจ ชื่อแพ็คเกจส่วนหนึ่งของชื่อที่ผ่านการรับรองเต็มชื่อที่ระบุโดยชื่อแพ็คเกจ หากชื่อที่มีคุณสมบัติครบถ้วนของ R คือ Android.r หรือ com.company.r ชื่อแพ็คเกจคือ "Android" หรือ "Com.Company" GetPackAgename เป็นจริง this.getPackagename () ซึ่งส่งคืนชื่อแพ็คเกจของคลาสนี้โดยตรง
ชื่อคลาสคือคลาสที่ทรัพยากรเป็นของ ตัวอย่างเช่นอย่างที่เราทราบคลาสคงที่หลายคลาสในคลาส R.Java: Drawable, ID, String, Layout, ฯลฯ และรหัสทรัพยากรจำนวนมากถูกกำหนดไว้ด้านล่าง
ชื่อฟิลด์คือชื่อของรหัสทรัพยากร ตัวอย่างเช่นนิยามรหัสทรัพยากร:
สาธารณะคงที่สุดท้าย int del = 0x7f020002;
DEL เป็นชื่อของ ID ทรัพยากรและ 0x7F020002 คือค่าเลขฐานสิบหก
ด้วยพารามิเตอร์ 3 ตัววิธี getIdentifier สามารถรับรหัสทรัพยากรได้โดยการเปรียบเทียบวิธีการไดนามิก
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!