ระบบจะจัดระเบียบทรัพยากรของแอป เช่น ไอคอนแอป สตริงที่แปลแล้ว และบิตแมป ไว้ในไดเรกทอรีเฉพาะประเภทภายในไดเรกทอรี res/ ของแต่ละโมดูล คุณยังเพิ่มไฟล์แต่ละไฟล์ในเวอร์ชันอื่นที่ปรับให้เหมาะกับการกำหนดค่าอุปกรณ์ต่างๆ ได้ด้วย เช่น เวอร์ชันความละเอียดสูงของบิตแมปสำหรับหน้าจอความหนาแน่นสูง
Android Studio ช่วยให้คุณเพิ่มทรัพยากรใหม่และทรัพยากรสำรองได้หลายวิธี โดยขึ้นอยู่กับประเภทของทรัพยากรที่ต้องการเพิ่ม หน้านี้อธิบายวิธี เพิ่มไฟล์ทรัพยากรพื้นฐาน วิธีเปลี่ยนตำแหน่งของทรัพยากร และ วิธีการผสานทรัพยากร
ใน Jetpack Compose คุณจะกำหนด UI ใน Kotlin แทนเลย์เอาต์ XML
อย่างไรก็ตาม คุณยังคงใช้ไดเรกทอรี res/ เพื่อจัดเก็บเนื้อหาแบบคงที่ระดับแอป
เช่น ไอคอน แบบอักษร และการแปล ดูวิธีเข้าถึงแหล่งข้อมูลเหล่านี้ในฟังก์ชันที่ประกอบได้ที่แหล่งข้อมูลใน Compose
ดูรายละเอียดเกี่ยวกับวิธีสร้างประเภททรัพยากรที่เฉพาะเจาะจงได้ในหน้าต่อไปนี้
- หากต้องการเพิ่มไฟล์สตริง โปรดดูแปล UI ด้วยเครื่องมือแก้ไขคำแปล
- หากต้องการเพิ่มบิตแมป โปรดดูสร้างไอคอนแอป
- หากต้องการเพิ่มไฟล์ SVG โปรดดูเพิ่มกราฟิกเวกเตอร์ที่มีความหนาแน่นหลากหลาย
ดูข้อมูลเกี่ยวกับวิธีอ้างอิงทรัพยากรจากโค้ดแอปได้ที่ภาพรวมทรัพยากรของแอป
เพิ่มไฟล์ทรัพยากร XML
แม้ว่าลิงก์ในหน้าก่อนหน้าจะอธิบายเวิร์กโฟลว์ที่ปรับแต่งสำหรับทรัพยากรแต่ละประเภท แต่คุณก็เพิ่มไฟล์ทรัพยากร XML ได้โดยทำตามขั้นตอนต่อไปนี้
- คลิกโมดูลแอปเป้าหมายในหน้าต่างโปรเจ็กต์ในมุมมองAndroid หรือโปรเจ็กต์
- เลือกไฟล์ > ใหม่ > ไฟล์ทรัพยากร Android
รูปที่ 1 กล่องโต้ตอบไฟล์ทรัพยากรใหม่
- กรอกรายละเอียดในกล่องโต้ตอบ
- ชื่อไฟล์: ป้อนชื่อไฟล์ XML (ไม่จำเป็นต้องมีคำต่อท้าย
.xml) - ประเภททรัพยากร: เลือกประเภททรัพยากรที่ต้องการสร้าง
- องค์ประกอบรูท: หากมี ให้เลือกองค์ประกอบรูท XML สำหรับ ไฟล์ ทรัพยากรบางประเภทรองรับองค์ประกอบรูทเพียงประเภทเดียว คุณอาจแก้ไขไม่ได้ ทั้งนี้ขึ้นอยู่กับประเภททรัพยากรที่เลือก
- ชุดซอร์ส: เลือกชุดซอร์ส ที่คุณต้องการบันทึกไฟล์
- ชื่อไดเรกทอรี: ต้องตั้งชื่อไดเรกทอรีให้สอดคล้องกับประเภททรัพยากรและตัวระบุการกำหนดค่า อย่าแก้ไขข้อความนี้ เว้นแต่คุณต้องการเพิ่มตัวระบุการกำหนดค่าลงในชื่อไดเรกทอรี ด้วยตนเอง (ใช้ตัวระบุที่ใช้ได้แทน)
- ตัวระบุที่มี: คุณสามารถเพิ่มตัวระบุได้โดยเลือกตัวระบุจากรายการ แล้วคลิกเพิ่ม
แทนที่จะต้องใส่ตัวระบุการกำหนดค่าในชื่อไดเรกทอรีด้วยตนเอง
- ชื่อไฟล์: ป้อนชื่อไฟล์ XML (ไม่จำเป็นต้องมีคำต่อท้าย
- เมื่อเพิ่มตัวกรองทั้งหมดที่ต้องการแล้ว ให้คลิกตกลง
แทรกทรัพยากร XML ที่ซับซ้อนในบรรทัด
ทรัพยากรที่ซับซ้อนบางอย่างต้องใช้ไฟล์ทรัพยากร XML หลายไฟล์ เช่น แม้ว่า Compose จะมี API ภาพเคลื่อนไหวที่แข็งแกร่ง แต่คุณอาจต้องใช้ภาพวาด Vector Drawable เคลื่อนไหว ซึ่งมีออบเจ็กต์ภาพวาดเวกเตอร์และออบเจ็กต์ภาพเคลื่อนไหว และต้องใช้ไฟล์ XML อย่างน้อย 3 ไฟล์
ในตัวอย่างนี้ คุณสามารถสร้างและเก็บไฟล์ XML แยกกัน 3 ไฟล์ไว้ได้หากต้องการนำไฟล์อย่างน้อย 1 ไฟล์กลับมาใช้ซ้ำ แต่หากใช้ไฟล์ XML สำหรับ AnimatedVectorDrawable นี้เท่านั้น คุณสามารถใช้รูปแบบทรัพยากรอินไลน์ที่ระบุไว้ใน Android Asset Packaging Tool (AAPT) แทนได้ AAPT ช่วยให้คุณกำหนด ทั้ง 3 แหล่งข้อมูลในไฟล์ XML เดียวได้ ดูข้อมูลเพิ่มเติมได้ที่ทรัพยากร XML ที่ซับซ้อนในบรรทัด
เพิ่มไดเรกทอรีทรัพยากร
หากต้องการเพิ่มไดเรกทอรีทรัพยากรใหม่ ให้ทำตามขั้นตอนต่อไปนี้
- คลิกโมดูลแอปเป้าหมายในหน้าต่างโปรเจ็กต์
- เลือก File > New > ไดเรกทอรีทรัพยากร Android
รูปที่ 2 กล่องโต้ตอบไดเรกทอรีทรัพยากรใหม่
- กรอกรายละเอียดในกล่องโต้ตอบ
- ชื่อไดเรกทอรี: ไดเรกทอรีต้องมีชื่อที่เฉพาะเจาะจง สำหรับประเภททรัพยากรและชุดค่าผสมของตัวระบุการกำหนดค่า อย่า แก้ไขส่วนนี้ เว้นแต่คุณต้องการเพิ่มตัวระบุการกำหนดค่าลงในชื่อไดเรกทอรี ด้วยตนเอง (ให้ใช้ตัวระบุที่ใช้ได้แทน)
- ประเภททรัพยากร: เลือกประเภททรัพยากรที่ต้องการให้ไดเรกทอรี มี
- ชุดซอร์ส: เลือกชุดซอร์สที่คุณต้องการให้มีไดเรกทอรี
- ตัวระบุที่มี: คุณสามารถเพิ่มตัวระบุได้โดยเลือกตัวระบุจากรายการ แล้วคลิกเพิ่ม
แทนที่จะระบุตัวระบุการกำหนดค่าในชื่อไดเรกทอรีด้วยตนเอง
- เมื่อเพิ่มตัวกรองทั้งหมดที่ต้องการแล้ว ให้คลิกตกลง
เปลี่ยนไดเรกทอรีทรัพยากร
โดยค่าเริ่มต้น ทรัพยากรจะอยู่ใน
module-name/src/source-set-name/res/
เช่น แหล่งข้อมูลสำหรับชุดซอร์สหลักของโมดูลจะอยู่ใน src/main/res/
และแหล่งข้อมูลสำหรับชุดซอร์สของการแก้ไขข้อบกพร่องจะอยู่ใน src/debug/res/
อย่างไรก็ตาม คุณสามารถเปลี่ยนเส้นทางเหล่านี้ไปยังตำแหน่งอื่นๆ (เทียบกับไฟล์ build.gradle) ได้โดยใช้พร็อพเพอร์ตี้ res.srcDirs
ในบล็อก sourceSets เช่น
ดึงดูด
android { sourceSets { main { res.srcDirs = ['resources/main'] } debug { res.srcDirs = ['resources/debug'] } } }
Kotlin
android { sourceSets { getByName("main") { res.srcDirs("resources/main") } getByName("debug") { res.srcDirs("resources/debug") } } }
นอกจากนี้ คุณยังระบุไดเรกทอรีทรัพยากรหลายรายการสำหรับชุดซอร์สเดียวได้ แล้วเครื่องมือบิลด์จะผสานรวมไดเรกทอรีเหล่านั้นเข้าด้วยกัน เช่น
ดึงดูด
android { sourceSets { main { res.srcDirs = ['res1', 'res2'] } } }
Kotlin
android { sourceSets { main { res.srcDirs("res1", "res2") } } }
ดูข้อมูลเพิ่มเติมได้ที่ชุดซอร์ส
การผสานทรัพยากร
แหล่งที่มาของทรัพยากรในไฟล์แอปสุดท้ายมี 3 แหล่งที่มา ได้แก่
- ชุดซอร์สหลัก (โดยทั่วไปจะอยู่ใน
src/main/res/) - ชุดซอร์สของตัวแปรบิลด์
- ไลบรารี Android (AAR)
เมื่อทรัพยากรทั้งหมดจากชุดซอร์สหรือไลบรารีแต่ละรายการไม่ซ้ำกัน ระบบจะเพิ่มทรัพยากรทั้งหมดลงในแอปสุดท้าย โดยจะถือว่าทรัพยากรไม่ซ้ำกันหากชื่อไฟล์ไม่ซ้ำกันทั้งในไดเรกทอรีประเภททรัพยากรและตัวระบุทรัพยากร(หากมีการกำหนด)
หากมีทรัพยากรเดียวกัน 2 เวอร์ชันขึ้นไปที่ตรงกัน ระบบจะรวมทรัพยากรเพียงเวอร์ชันเดียว ไว้ในแอปขั้นสุดท้าย เครื่องมือบิลด์จะเลือกเวอร์ชันที่จะ เก็บไว้ตามลำดับความสำคัญต่อไปนี้ (ลำดับความสำคัญสูงสุดอยู่ทางซ้าย)
build variant > build type > product flavor > main source set > library dependencies
เช่น หากชุดซอร์สหลักมีข้อมูลต่อไปนี้
res/values/strings.xmlres/values-es/strings.xml
และประเภทบิลด์การแก้ไขข้อบกพร่องประกอบด้วย
res/values/strings.xml
จากนั้นแอปสุดท้ายจะมี res/values/strings.xml จากประเภทบิลด์การแก้ไขข้อบกพร่อง
และ res/values-es/strings.xml จากชุดซอร์สหลัก
อย่างไรก็ตาม หากการกำหนดค่าบิลด์ระบุโฟลเดอร์ทรัพยากรหลายโฟลเดอร์ สำหรับชุดซอร์สที่กำหนด และแหล่งที่มาเหล่านั้นขัดแย้งกัน ระบบจะแสดงข้อผิดพลาด และผสานไม่สำเร็จเนื่องจากไดเรกทอรีทรัพยากรแต่ละรายการมีลำดับความสำคัญเดียวกัน