แนวคิดและการติดตั้งใช้งาน Jetpack Compose
ทรัพยากรคือไฟล์เพิ่มเติมและเนื้อหาแบบคงที่ที่โค้ดของคุณใช้ เช่น บิตแมป คำจำกัดความของเลย์เอาต์ สตริงของอินเทอร์เฟซผู้ใช้ คำสั่งภาพเคลื่อนไหว และอื่นๆ
แยกทรัพยากรของแอป เช่น รูปภาพและสตริง ออกจากโค้ดเสมอ เพื่อให้คุณดูแลทรัพยากรเหล่านั้นได้อย่างอิสระ นอกจากนี้ ให้ระบุทรัพยากรสำรอง สำหรับการกำหนดค่าอุปกรณ์ที่เฉพาะเจาะจงโดยจัดกลุ่มไว้ในไดเรกทอรีทรัพยากร ที่มีชื่อเฉพาะ ในเวลาเรียกใช้ Android จะใช้ทรัพยากรที่เหมาะสมตามการกำหนดค่าปัจจุบัน เช่น คุณอาจต้องการจัดเลย์เอาต์ UI ที่แตกต่างกันตามขนาดหน้าจอ หรือสตริงที่แตกต่างกันตามการตั้งค่าภาษา
เมื่อแยกทรัพยากรของแอปออกไปภายนอกแล้ว คุณจะเข้าถึงทรัพยากรเหล่านั้นได้โดยใช้รหัสทรัพยากร
ที่สร้างขึ้นในคลาส R ของโปรเจ็กต์ เอกสารนี้แสดงวิธีจัดกลุ่มทรัพยากรในโปรเจ็กต์ Android นอกจากนี้ ยังแสดงวิธีระบุ
ทรัพยากรทางเลือกสำหรับการกำหนดค่าอุปกรณ์ที่เฉพาะเจาะจง แล้วเข้าถึงทรัพยากรเหล่านั้น
จากโค้ดแอปหรือไฟล์ XML อื่นๆ
ประเภททรัพยากรของกลุ่ม
วางทรัพยากรแต่ละประเภทไว้ในไดเรกทอรีย่อยที่เฉพาะเจาะจงของไดเรกทอรี res/
ของโปรเจ็กต์ ตัวอย่างเช่น นี่คือลำดับชั้นของไฟล์สำหรับโปรเจ็กต์ง่ายๆ
MyProject/
src/
MyActivity.java
res/
drawable/
graphic.png
layout/
main.xml
info.xml
mipmap/
icon.png
values/
strings.xml
ไดเรกทอรี res/ มีทรัพยากรทั้งหมดในไดเรกทอรีย่อย ได้แก่ ทรัพยากรรูปภาพ ทรัพยากรเลย์เอาต์ 2 รายการ ไดเรกทอรี mipmap/ สำหรับไอคอนตัวเรียกใช้ และไฟล์ทรัพยากรสตริง ชื่อไดเรกทอรีทรัพยากรมีความสำคัญและ
อธิบายไว้ในตารางที่ 1
ตาราง 1. ไดเรกทอรีทรัพยากรที่รองรับภายในไดเรกทอรีโปรเจ็กต์ res/
ไดเรกทอรี |
ประเภทแหล่งข้อมูล |
|
|
ไฟล์ XML ที่กำหนดภาพเคลื่อนไหวของพร็อพเพอร์ตี้ |
|
|
ไฟล์ XML ที่กำหนดภาพเคลื่อนไหวแบบทวีต นอกจากนี้ คุณยังบันทึกภาพเคลื่อนไหวของพร็อพเพอร์ตี้ในไดเรกทอรีนี้ได้ด้วย แต่ขอแนะนำให้ใช้ไดเรกทอรี |
|
|
ไฟล์ XML ที่กำหนดรายการสถานะของสี ดูข้อมูลเพิ่มเติมได้ที่แหล่งข้อมูลรายการสถานะสี |
|
|
ไฟล์บิตแมป (PNG, .
ดูข้อมูลเพิ่มเติมได้ที่ทรัพยากร Drawable |
|
|
ไฟล์ Drawable สำหรับความหนาแน่นของไอคอน Launcher ที่แตกต่างกัน ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการไอคอน Launcher ด้วย |
|
|
ไฟล์ XML ที่กำหนดเลย์เอาต์ของอินเทอร์เฟซผู้ใช้ ดูข้อมูลเพิ่มเติมได้ที่ทรัพยากรเลย์เอาต์ |
|
|
ไฟล์ XML ที่กำหนดเมนูแอป เช่น เมนูตัวเลือก เมนูตามบริบท หรือเมนูย่อย ดูข้อมูลเพิ่มเติมได้ที่ทรัพยากรเมนู |
|
|
ไฟล์ใดก็ได้ที่จะบันทึกในรูปแบบดิบ หากต้องการเปิดแหล่งข้อมูลเหล่านี้ด้วย อย่างไรก็ตาม หากคุณต้องการเข้าถึงชื่อไฟล์และลำดับชั้นของไฟล์เดิม ให้พิจารณาบันทึกทรัพยากรในไดเรกทอรี |
|
|
ไฟล์ XML ที่มีค่าอย่างง่าย เช่น สตริง จำนวนเต็ม และสี ในขณะที่ไฟล์ทรัพยากร XML ใน เนื่องจากทรัพยากรแต่ละรายการกำหนดด้วยองค์ประกอบ XML ของตัวเอง คุณจึงตั้งชื่อไฟล์ได้ตามต้องการและวางทรัพยากรประเภทต่างๆ ไว้ในไฟล์เดียวได้ อย่างไรก็ตาม เพื่อความชัดเจน คุณอาจต้องการวางประเภททรัพยากรที่ไม่ซ้ำกันในไฟล์ต่างๆ ตัวอย่างเช่น ต่อไปนี้คือรูปแบบการตั้งชื่อไฟล์สำหรับทรัพยากรที่คุณสร้างได้ในไดเรกทอรีนี้
ดูข้อมูลเพิ่มเติมได้ที่ทรัพยากรสตริง ทรัพยากรสไตล์ และประเภททรัพยากรอื่นๆ |
|
|
ไฟล์ XML ที่กำหนดเองซึ่งอ่านได้ขณะรันไทม์โดยการเรียกใช้ |
|
|
ไฟล์แบบอักษรที่มีนามสกุล เช่น TTF, OTF หรือ TTC หรือไฟล์ XML ที่มีองค์ประกอบ |
ทรัพยากรที่คุณบันทึกไว้ในไดเรกทอรีย่อยที่กำหนดไว้ในตารางที่ 1 คือทรัพยากรเริ่มต้น กล่าวคือ ทรัพยากรเหล่านี้จะกำหนดการออกแบบและเนื้อหาเริ่มต้นสำหรับแอปของคุณ อย่างไรก็ตาม อุปกรณ์ที่ใช้ Android ประเภทต่างๆ อาจต้องใช้ทรัพยากรประเภทต่างๆ
เช่น คุณสามารถระบุแหล่งข้อมูลเลย์เอาต์ที่แตกต่างกันสำหรับอุปกรณ์ที่มีหน้าจอใหญ่กว่าปกติเพื่อใช้ประโยชน์จากพื้นที่หน้าจอเพิ่มเติม นอกจากนี้ คุณยังระบุแหล่งข้อมูลสตริงที่แตกต่างกันซึ่งแปลข้อความในอินเทอร์เฟซผู้ใช้ตามการตั้งค่าภาษาของอุปกรณ์ได้ด้วย หากต้องการระบุแหล่งข้อมูลที่แตกต่างกันเหล่านี้ สำหรับการกำหนดค่าอุปกรณ์ที่แตกต่างกัน คุณต้องระบุแหล่งข้อมูลสำรอง นอกเหนือจากแหล่งข้อมูลเริ่มต้น
จัดหาแหล่งข้อมูลทางเลือก
แอปส่วนใหญ่มีทรัพยากรทางเลือกเพื่อรองรับการกำหนดค่าอุปกรณ์ที่เฉพาะเจาะจง เช่น ใส่ทรัพยากร Drawable ทางเลือกสำหรับความหนาแน่นของหน้าจอที่แตกต่างกัน และทรัพยากรสตริงทางเลือกสำหรับภาษาต่างๆ ในขณะรันไทม์ Android จะตรวจหาการกำหนดค่าอุปกรณ์ปัจจุบันและโหลดทรัพยากรที่เหมาะสมสำหรับแอป

รูปที่ 1 อุปกรณ์ 2 เครื่องที่ใช้ทรัพยากรเลย์เอาต์ที่แตกต่างกันตามขนาดหน้าจอ
หากต้องการระบุทางเลือกอื่นที่เฉพาะเจาะจงกับการกำหนดค่าสำหรับชุดทรัพยากร ให้ทำดังนี้
สร้างไดเรกทอรีใหม่ใน
res/โดยตั้งชื่อในรูปแบบ<resources_name>-<qualifier><resources_name>คือชื่อไดเรกทอรีของทรัพยากรเริ่มต้นที่เกี่ยวข้อง (กำหนดไว้ในตารางที่ 1)<qualifier>คือชื่อที่ระบุการกำหนดค่าแต่ละรายการสำหรับ ซึ่งจะใช้ทรัพยากรเหล่านี้ (กำหนดไว้ในตารางที่ 2)
คุณต่อท้าย
<qualifier>ได้มากกว่า 1 รายการ คั่นแต่ละรายการด้วยขีดกลางบันทึกแหล่งข้อมูลสำรองที่เหมาะสมในไดเรกทอรีใหม่นี้ ไฟล์ทรัพยากรต้องมีชื่อเหมือนกับไฟล์ทรัพยากรเริ่มต้นทุกประการ
ตัวอย่างแหล่งข้อมูลเริ่มต้นและแหล่งข้อมูลทางเลือกมีดังนี้
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
ตัวระบุ hdpi แสดงว่าทรัพยากรในไดเรกทอรีนั้นมีไว้สำหรับ
อุปกรณ์ที่มีหน้าจอความหนาแน่นสูง รูปภาพในไดเรกทอรีที่วาดได้เหล่านี้ ได้รับการปรับขนาดให้เหมาะกับความหนาแน่นของหน้าจอที่เฉพาะเจาะจง แต่ชื่อไฟล์จะเหมือนกันทุกประการ
ด้วยวิธีนี้ รหัสทรัพยากรที่คุณใช้เพื่ออ้างอิงรูปภาพ icon.png หรือ background.png จะเหมือนกันเสมอ Android จะเลือกเวอร์ชันของแต่ละทรัพยากรที่ตรงกับอุปกรณ์ปัจจุบันมากที่สุดโดยการเปรียบเทียบข้อมูลการกำหนดค่าอุปกรณ์กับตัวระบุในชื่อไดเรกทอรีทรัพยากร
ตารางที่ 2 แสดงตัวระบุการกำหนดค่าที่ถูกต้องตามลำดับความสำคัญ คุณ เพิ่มตัวระบุหลายรายการลงในชื่อไดเรกทอรีเดียวได้โดยคั่นตัวระบุแต่ละรายการด้วย เครื่องหมายขีดกลาง หากใช้ตัวระบุหลายตัวสำหรับไดเรกทอรีทรัพยากร คุณต้องเพิ่มตัวระบุเหล่านั้นลงในชื่อไดเรกทอรีตามลำดับที่แสดงในตาราง
ตารางที่ 2 ชื่อตัวระบุการกำหนดค่า
การกำหนดค่า |
ค่าตัวระบุ |
คำอธิบาย |
MCC และ MNC |
ตัวอย่าง
|
รหัสโทรศัพท์มือถือของประเทศ (MCC) ตามด้วยรหัสระบุเครือข่ายมือถือ (MNC) จากซิมการ์ดในอุปกรณ์ (ไม่บังคับ) เช่น หากอุปกรณ์ใช้การเชื่อมต่อวิทยุ (เช่น โทรศัพท์ GSM) ค่า MCC และ MNC จะมาจากซิมการ์ด นอกจากนี้ คุณยังใช้ MCC เพียงอย่างเดียวได้ด้วย เช่น เพื่อรวมแหล่งข้อมูลทางกฎหมายเฉพาะประเทศไว้ในแอป หากต้องการระบุตามภาษาเท่านั้น ให้ใช้ตัวระบุภาษา สคริปต์ (ไม่บังคับ) และภูมิภาค (ไม่บังคับ) แทน หากใช้ตัวระบุ MCC และ MNC ให้ใช้ด้วยความระมัดระวังและทดสอบว่าทำงานได้ตามที่คาดไว้ ดูฟิลด์การกำหนดค่า |
ภาษา สคริปต์ (ไม่บังคับ) และภูมิภาค (ไม่บังคับ) |
ตัวอย่าง
|
ภาษาจะกำหนดโดยรหัสภาษาแบบ 2 ตัวอักษรตามมาตรฐาน ISO 639-2{:.external} โดยอาจตามด้วยรหัสภูมิภาคแบบ 2 ตัวอักษรตามมาตรฐาน ISO 3166-1-alpha-2{:.external} (นำหน้าด้วย รหัสไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ระบบจะใช้คำนำหน้า Android 7.0 (ระดับ API 24) ได้เปิดตัวการรองรับแท็กภาษา BCP 47{:.external} ซึ่งคุณใช้เพื่อระบุทรัพยากรเฉพาะภาษาและภูมิภาคได้ แท็กภาษาประกอบด้วยลำดับของแท็กย่อยอย่างน้อย 1 รายการ ซึ่งแต่ละรายการจะปรับแต่งหรือจำกัดช่วงของภาษาที่ระบุโดยแท็กโดยรวม ดูข้อมูลเพิ่มเติมเกี่ยวกับแท็กภาษาได้ที่แท็กสำหรับระบุภาษา{:.external} หากต้องการใช้แท็กภาษา BCP 47 ให้ต่อกันระหว่าง แท็กภาษาอาจเปลี่ยนแปลงได้ตลอดอายุของแอปหากผู้ใช้เปลี่ยนภาษาในการตั้งค่าระบบ ดูข้อมูลเกี่ยวกับผลกระทบที่อาจเกิดขึ้นกับแอปในระหว่างรันไทม์ได้ที่จัดการการเปลี่ยนแปลงการกำหนดค่า ดูคำแนะนำฉบับสมบูรณ์เกี่ยวกับการแปลแอปเป็นภาษาอื่นๆ ได้ที่แปลแอปของคุณ ดูเมธอด |
| เพศทางไวยากรณ์ | masculinefeminineneuter |
เพศทางไวยากรณ์ของผู้ใช้ ใช้สำหรับภาษาที่มีเพศทางไวยากรณ์ เช่น หากคุณต้องการจัดหาแหล่งข้อมูลที่แตกต่างกันสำหรับผู้ใช้ที่พูดภาษาฝรั่งเศส คุณสามารถใช้ไดเรกทอรีต่อไปนี้
ดูการผันไวยากรณ์ใน Android นอกจากนี้ โปรดดูวิธีการกำหนดค่า เพิ่มใน API ระดับ 34 |
ทิศทางเลย์เอาต์ |
|
ทิศทางการจัดวางของแอป ซึ่งใช้ได้กับทรัพยากรทุกอย่าง เช่น เลย์เอาต์ Drawable หรือค่า ตัวอย่างเช่น หากต้องการระบุเลย์เอาต์สำหรับภาษาอาหรับและเลย์เอาต์ทั่วไปสำหรับภาษาอื่นๆ ที่ "อ่านจากขวาไปซ้าย" เช่น เปอร์เซียหรือฮีบรู คุณจะต้องใช้ไดเรกทอรีดังต่อไปนี้
หมายเหตุ: หากต้องการเปิดใช้ฟีเจอร์เลย์เอาต์จากขวาไปซ้ายสำหรับแอป คุณต้องตั้งค่า เพิ่มในระดับ API 17 |
ความกว้างที่เล็กที่สุด |
ตัวอย่าง
อื่นๆ |
ขนาดที่สั้นที่สุดของพื้นที่หน้าจอที่แอปใช้ได้ กล่าวคือ เช่น หากเลย์เอาต์กำหนดให้ขนาดที่เล็กที่สุดของพื้นที่หน้าจอต้องมีอย่างน้อย 600 dp ตลอดเวลา คุณก็ใช้ตัวระบุนี้เพื่อสร้างทรัพยากรเลย์เอาต์ในไดเรกทอรี การใช้ความกว้างที่เล็กที่สุดเพื่อกำหนดขนาดหน้าจอทั่วไปมีประโยชน์เนื่องจากความกว้างมักเป็นปัจจัยสำคัญในการออกแบบเลย์เอาต์ โดยปกติแล้ว UI จะเลื่อนในแนวตั้ง แต่มีข้อจำกัดที่ค่อนข้างเข้มงวดเกี่ยวกับพื้นที่ขั้นต่ำที่ต้องใช้ในแนวนอน ความกว้างที่ใช้ได้ยังเป็นปัจจัยสำคัญในการพิจารณาว่าจะใช้เลย์เอาต์แบบ 1 บานหน้าต่างสำหรับโทรศัพท์มือถือหรือเลย์เอาต์แบบหลายบานหน้าต่างสำหรับแท็บเล็ต ดังนั้น คุณจึงน่าจะสนใจมากที่สุดว่าความกว้างที่เล็กที่สุดที่เป็นไปได้ในแต่ละอุปกรณ์คือเท่าใด ความกว้างที่เล็กที่สุดของอุปกรณ์จะพิจารณาถึงการตกแต่งหน้าจอและ UI ของระบบ ตัวอย่างเช่น หากอุปกรณ์มีองค์ประกอบ UI ที่คงอยู่บนหน้าจอซึ่งคิดเป็นพื้นที่ตามแกนของความกว้างที่เล็กที่สุด ระบบจะประกาศว่าความกว้างที่เล็กที่สุดนั้นเล็กกว่าขนาดหน้าจอจริง เนื่องจากพิกเซลเหล่านั้นเป็นพิกเซลหน้าจอที่ UI ของคุณใช้ไม่ได้ ค่าบางอย่างที่คุณอาจใช้ที่นี่สำหรับขนาดหน้าจอทั่วไปมีดังนี้
เมื่อแอปมีไดเรกทอรีทรัพยากรหลายรายการที่มีค่าแตกต่างกันสำหรับตัวระบุ เพิ่มในระดับ API 13 ดูแอตทริบิวต์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการออกแบบสำหรับหน้าจอต่างๆ โดยใช้ตัวระบุนี้ได้ที่การออกแบบที่ตอบสนองตามอุปกรณ์/การออกแบบที่ปรับเปลี่ยนตามอุปกรณ์ด้วยมุมมอง |
ความกว้างและความสูงที่ใช้ได้ |
ตัวอย่าง
อื่นๆ |
ระบุความกว้างหรือความสูงของหน้าจอขั้นต่ำที่พร้อมใช้งาน (ใน ความกว้างและความสูงที่ใช้ได้มักมีประโยชน์ในการพิจารณาว่าจะใช้เลย์เอาต์แบบหลายช่องหรือไม่ เนื่องจากแม้ในอุปกรณ์แท็บเล็ต คุณก็มักไม่ต้องการเลย์เอาต์แบบหลายช่องเดียวกันสำหรับการวางแนวแนวตั้งกับแนวนอน ดังนั้น คุณจึงใช้ตัวระบุเหล่านี้เพื่อระบุความกว้างและ/หรือความสูงขั้นต่ำที่จำเป็นสำหรับเลย์เอาต์ได้ แทนที่จะใช้ทั้งตัวระบุขนาดหน้าจอและตัวระบุการวางแนวพร้อมกัน เมื่อแอปมีไดเรกทอรีทรัพยากรหลายรายการที่มีค่าแตกต่างกันสำหรับการกำหนดค่าเหล่านี้ ระบบจะใช้ไดเรกทอรีที่มีค่าใกล้เคียงที่สุด (โดยไม่เกิน) ความกว้างของหน้าจอปัจจุบันของอุปกรณ์ ใกล้ที่สุดจะพิจารณาจากการบวกความแตกต่างระหว่างความกว้างของหน้าจอจริงกับความกว้างที่ระบุเข้ากับความแตกต่างระหว่างความสูงของหน้าจอจริงกับความสูงที่ระบุ โดยความสูงและความกว้างที่ไม่ได้ระบุจะมีค่าเป็น 0 ค่าดังกล่าวไม่รวมพื้นที่ที่ขอบหน้าต่างครอบครอง ดังนั้นหากอุปกรณ์มีองค์ประกอบ UI แบบถาวรที่ขอบของจอแสดงผล ค่าความกว้างและความสูงจะเล็กกว่าขนาดหน้าจอจริง แม้ว่าแอปจะแสดงแบบขอบจรดขอบโดยใช้ การตกแต่งหน้าจอแนวตั้งบางอย่างที่ไม่ได้แก้ไข (เช่น แถบสถานะโทรศัพท์ที่ซ่อนได้เมื่อเต็มหน้าจอ) จะไม่รวมอยู่ในที่นี้ เช่นเดียวกับการตกแต่งหน้าต่าง เช่น แถบชื่อหรือแถบการดำเนินการ ดังนั้นแอปจึงต้องเตรียมพร้อมที่จะรับมือกับพื้นที่ที่อาจเล็กกว่าที่ระบุไว้ หมายเหตุ: ระบบจะเลือกแหล่งข้อมูลที่มีความกว้างและความสูงตรงกัน ดังนั้น เราจึงขอแนะนำให้ใช้ทรัพยากรที่ระบุทั้ง 2 อย่างมากกว่าทรัพยากรที่ระบุอย่างใดอย่างหนึ่งเท่านั้น ตัวอย่างเช่น หากหน้าจอจริงมีความกว้าง 720dp และสูง 1280dp และทรัพยากรหนึ่งมีคุณสมบัติเป็น w720dp และอีกทรัพยากรมีคุณสมบัติเป็น w700dp-h1200dp ระบบจะเลือกทรัพยากรหลังแม้ว่าทรัพยากรแรกจะตรงกับสิ่งที่ระบุไว้ก็ตาม เพิ่มในระดับ API 13 ดูฟิลด์การกำหนดค่า ดูข้อมูลเพิ่มเติมเกี่ยวกับการออกแบบสำหรับหน้าจอต่างๆ โดยใช้ตัวระบุนี้ได้ที่การออกแบบที่ตอบสนองตามอุปกรณ์/การออกแบบที่ปรับเปลี่ยนตามอุปกรณ์ด้วยมุมมอง |
ขนาดหน้าจอ |
|
หมายเหตุ: การใช้ตัวระบุขนาดไม่ได้หมายความว่าทรัพยากรจะใช้ได้เฉพาะกับหน้าจอขนาดนั้นๆ หากคุณไม่ได้ระบุแหล่งข้อมูลสำรองที่มีตัวระบุที่ตรงกับการกำหนดค่าอุปกรณ์ปัจจุบันมากกว่า ระบบจะใช้แหล่งข้อมูลใดก็ตามที่ตรงกันมากที่สุด ข้อควรระวัง: หากทรัพยากรทั้งหมดใช้ตัวระบุขนาดที่ใหญ่กว่าหน้าจอปัจจุบัน ระบบจะไม่ใช้ทรัพยากรเหล่านั้นและแอปจะขัดข้องขณะรันไทม์ กรณีนี้จะเกิดขึ้น เช่น หากทรัพยากรเลย์เอาต์ทั้งหมดติดแท็กด้วยตัวระบุ เพิ่มใน API ระดับ 4 ดูฟิลด์การกำหนดค่า ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมความเข้ากันได้ของหน้าจอ |
สัดส่วนหน้าจอ |
|
เพิ่มใน API ระดับ 4 ซึ่งอิงตามสัดส่วนภาพของหน้าจอเท่านั้น (หน้าจอ ดูฟิลด์กำหนดค่า |
หน้าจอกลม |
|
เพิ่มใน API ระดับ 23 ดูวิธีการกำหนดค่า |
Wide Color Gamut |
|
เพิ่มในระดับ API 26 ดูวิธีการกำหนดค่า |
รองรับ High Dynamic Range (HDR) |
|
เพิ่มในระดับ API 26 ดูวิธีการกำหนดค่า |
การวางแนวหน้าจอ |
|
ซึ่งอาจเปลี่ยนแปลงได้ในระหว่างอายุการใช้งานของแอปหากผู้ใช้หมุนหน้าจอ ดูข้อมูลเกี่ยวกับผลกระทบต่อแอปของคุณในระหว่างรันไทม์ได้ที่จัดการการเปลี่ยนแปลงการกำหนดค่า นอกจากนี้ โปรดดูฟิลด์กำหนดค่า |
โหมด UI |
|
เพิ่มในระดับ API 8, เพิ่มโทรทัศน์ในระดับ API 13, เพิ่มเครื่องใช้ไฟฟ้าในระดับ API 16, เพิ่มนาฬิกาในระดับ API 20, เพิ่ม VRheadset ในระดับ API 26 ดูข้อมูลเกี่ยวกับวิธีที่แอปตอบสนองเมื่อเสียบหรือถอดอุปกรณ์ออกจากแท่นวางได้ที่กำหนดและตรวจสอบสถานะและประเภทการเชื่อมต่อ ซึ่งอาจเปลี่ยนแปลงได้ในระหว่างอายุการใช้งานของแอปหากผู้ใช้วางอุปกรณ์ไว้ในแท่นวาง คุณเปิดหรือปิดใช้โหมดบางโหมดได้โดยใช้ |
โหมดกลางคืน |
|
เพิ่มใน API ระดับ 8 ซึ่งอาจเปลี่ยนแปลงได้ตลอดอายุการใช้งานของแอปหากปล่อยให้โหมดกลางคืนอยู่ในโหมดอัตโนมัติ (ค่าเริ่มต้น) ในกรณีนี้ โหมดจะเปลี่ยนตามช่วงเวลาของวัน คุณเปิดหรือปิดใช้โหมดนี้ได้โดยใช้ |
ความหนาแน่นของพิกเซลหน้าจอ (dpi) |
|
อัตราส่วนการปรับขนาดระหว่างความหนาแน่นหลัก 6 รายการคือ 3:4:6:8:12:16 (ไม่รวมความหนาแน่น tvdpi) ดังนั้น บิตแมปขนาด 9x9 ใน ldpi จะเป็น 12x12 ใน mdpi, 18x18 ใน hdpi, 24x24 ใน xhdpi และอื่นๆ หมายเหตุ: การใช้ตัวระบุความหนาแน่นไม่ได้หมายความว่าทรัพยากรจะใช้ได้เฉพาะกับหน้าจอที่มีความหนาแน่นนั้น หากคุณไม่ได้ระบุแหล่งข้อมูลสำรองที่มีตัวระบุที่ตรงกับการกำหนดค่าอุปกรณ์ปัจจุบันมากกว่า ระบบจะใช้แหล่งข้อมูลที่มีการจับคู่ที่ดีที่สุด ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีจัดการความหนาแน่นของหน้าจอที่แตกต่างกันและวิธีที่ Android อาจปรับขนาดบิตแมปให้พอดีกับความหนาแน่นปัจจุบันได้ที่ภาพรวมความเข้ากันได้ของหน้าจอ |
ประเภทหน้าจอสัมผัส |
|
ดูฟิลด์กำหนดค่า |
ความพร้อมใช้งานของแป้นพิมพ์ |
|
หากคุณระบุทรัพยากร ซึ่งอาจเปลี่ยนแปลงได้ในระหว่างอายุการใช้งานของแอปหากผู้ใช้เปิดแป้นพิมพ์ฮาร์ดแวร์ ดูข้อมูลเกี่ยวกับผลกระทบต่อแอปของคุณในระหว่างรันไทม์ได้ที่จัดการการเปลี่ยนแปลงการกำหนดค่า ดูฟิลด์การกำหนดค่า |
วิธีการป้อนข้อความหลัก |
|
ดูฟิลด์กำหนดค่า |
ความพร้อมใช้งานของปุ่มนำทาง |
|
ซึ่งอาจเปลี่ยนแปลงได้ในระหว่างอายุการใช้งานของแอปหากผู้ใช้แสดงคีย์การนำทาง ดูข้อมูลเกี่ยวกับผลกระทบต่อแอปของคุณในระหว่างรันไทม์ได้ที่จัดการการเปลี่ยนแปลงการกำหนดค่า นอกจากนี้ โปรดดูฟิลด์กำหนดค่า |
วิธีการนำทางหลักแบบไม่สัมผัส |
|
ดูฟิลด์กำหนดค่า |
เวอร์ชันของแพลตฟอร์ม (ระดับ API) |
ตัวอย่าง
อื่นๆ |
ระดับ API ที่อุปกรณ์รองรับ เช่น |
กฎชื่อตัวระบุ
กฎบางอย่างเกี่ยวกับการใช้ชื่อตัวระบุการกำหนดค่ามีดังนี้
- คุณระบุตัวระบุหลายรายการสำหรับชุดทรัพยากรเดียวได้โดยคั่นด้วยขีดกลาง เช่น
drawable-en-rUS-landจะมีผลกับอุปกรณ์ที่ใช้ภาษาอังกฤษ (สหรัฐอเมริกา) ในแนวนอน - ตัวระบุต้องอยู่ในลำดับที่ระบุไว้ในตารางที่ 2
- ไม่ถูกต้อง:
drawable-hdpi-port/ - ถูกต้อง:
drawable-port-hdpi/
- ไม่ถูกต้อง:
- คุณจะซ้อนไดเรกทอรีทรัพยากรทางเลือกไม่ได้ ตัวอย่างเช่น คุณไม่สามารถ
มี
res/drawable/drawable-en/ได้ - การป้อนค่านั้นไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ คอมไพเลอร์ทรัพยากรจะแปลงชื่อไดเรกทอรี เป็นตัวพิมพ์เล็กก่อนประมวลผลเพื่อหลีกเลี่ยงปัญหาในระบบไฟล์ ที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ การใช้อักษรตัวพิมพ์ใหญ่ในชื่อมีไว้เพื่อให้อ่านง่ายขึ้นเท่านั้น
- ระบบรองรับค่าเดียวสำหรับตัวระบุประเภทแต่ละรายการ เช่น หากต้องการใช้ไฟล์ Drawable เดียวกันสำหรับสเปนและฝรั่งเศส คุณจะมีไดเรกทอรีชื่อ
drawable-es-fr/ไม่ได้ แต่คุณต้องมีไดเรกทอรีทรัพยากร 2 รายการ เช่นdrawable-es/และdrawable-fr/ซึ่งมีไฟล์ที่เหมาะสม อย่างไรก็ตาม คุณไม่จำเป็นต้องทำซ้ำไฟล์ในทั้ง 2 ตำแหน่ง แต่คุณสามารถสร้างชื่อแทนให้กับทรัพยากรได้ ตามที่อธิบายไว้ในส่วนสร้างทรัพยากรชื่อแทน
หลังจากบันทึกทรัพยากรทางเลือกไว้ในไดเรกทอรีที่มีชื่อตามตัวระบุเหล่านี้แล้ว Android จะใช้ทรัพยากรในแอปโดยอัตโนมัติตามการกำหนดค่าอุปกรณ์ปัจจุบัน ทุกครั้งที่มีการขอทรัพยากร Android จะตรวจสอบไดเรกทอรีทรัพยากรทางเลือกที่มีไฟล์ทรัพยากรที่ขอ จากนั้นค้นหาทรัพยากรที่ตรงกันมากที่สุด
หากไม่มีทรัพยากรอื่นที่ตรงกับการกำหนดค่าอุปกรณ์หนึ่งๆ Android จะใช้ทรัพยากรเริ่มต้นที่เกี่ยวข้อง ซึ่งเป็นชุด ทรัพยากรสำหรับประเภททรัพยากรหนึ่งๆ ที่ไม่มีตัวระบุการกำหนดค่า
สร้างทรัพยากรชื่อแทน
เมื่อมีทรัพยากรที่ต้องการใช้สําหรับการกําหนดค่าอุปกรณ์มากกว่า 1 รายการ แต่ไม่ต้องการระบุเป็นทรัพยากรเริ่มต้น คุณไม่จําเป็นต้องใส่ทรัพยากรเดียวกันในไดเรกทอรีทรัพยากรทางเลือกมากกว่า 1 รายการ แต่คุณสามารถสร้างทรัพยากรทางเลือกที่ทำหน้าที่เป็นนามแฝงสำหรับทรัพยากรที่บันทึกไว้ในไดเรกทอรีทรัพยากรเริ่มต้นได้
ตัวอย่างเช่น สมมติว่าคุณมีไอคอนแอป icon.png และต้องการเวอร์ชันที่ไม่ซ้ำกัน
สำหรับภาษาต่างๆ อย่างไรก็ตาม ภาษาอังกฤษ (แคนาดา) และภาษาฝรั่งเศส (แคนาดา) ต้องใช้เวอร์ชันเดียวกัน คุณไม่จำเป็นต้องคัดลอกรูปภาพเดียวกันลงในไดเรกทอรีทรัพยากรสำหรับทั้งภาษาอังกฤษ-แคนาดาและฝรั่งเศส-แคนาดา
แต่คุณสามารถบันทึกรูปภาพที่ใช้สำหรับทั้ง 2 อย่างโดยใช้ชื่ออื่น
icon.png เช่น icon_ca.png แล้ววางไว้ในไดเรกทอรี res/drawable/
เริ่มต้น จากนั้นสร้างไฟล์ icon.xml ใน res/drawable-en-rCA/ และ
res/drawable-fr-rCA/ ที่อ้างอิงถึงทรัพยากร icon_ca.png โดยใช้
องค์ประกอบ <bitmap> ซึ่งจะช่วยให้คุณจัดเก็บไฟล์ PNG เพียงเวอร์ชันเดียวและไฟล์ XML ขนาดเล็ก 2 ไฟล์ที่ชี้ไปยังไฟล์ดังกล่าว ดูรายละเอียดได้ในตัวอย่างในส่วนต่อไปนี้
ถอนออกได้
หากต้องการสร้างชื่อแทนสำหรับ Drawable ที่มีอยู่ ให้ใช้องค์ประกอบ <drawable> ดังนี้
<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable name="icon">@drawable/icon_ca</drawable>
</resources>
หากบันทึกไฟล์นี้เป็น icon.xml ในไดเรกทอรีทรัพยากรทางเลือก เช่น res/values-en-rCA/ ระบบจะคอมไพล์ไฟล์นี้เป็นทรัพยากรที่คุณอ้างอิงได้เป็น R.drawable.icon แต่จริงๆ แล้วเป็นนามแฝงของทรัพยากร R.drawable.icon_ca ซึ่งบันทึกไว้ใน res/drawable/
การจัดวาง
หากต้องการสร้างชื่อแทนให้กับเลย์เอาต์ที่มีอยู่ ให้ใช้องค์ประกอบ <include> ที่อยู่ใน <merge> ดังนี้
<?xml version="1.0" encoding="utf-8"?>
<merge>
<include layout="@layout/main_ltr"/>
</merge>
หากบันทึกไฟล์นี้เป็น main.xml ระบบจะคอมไพล์เป็นทรัพยากรที่คุณอ้างอิงเป็น R.layout.main ได้ แต่จริงๆ แล้วเป็นนามแฝงสำหรับทรัพยากร R.layout.main_ltr
เข้าถึงทรัพยากรของแอป
เมื่อระบุทรัพยากรในแอปพลิเคชันแล้ว คุณจะใช้ทรัพยากรนั้นได้โดยอ้างอิง
รหัสทรัพยากรของทรัพยากรนั้น รหัสทรัพยากรทั้งหมดจะกำหนดไว้ในคลาส R ของโปรเจ็กต์ ซึ่งเครื่องมือ aapt จะสร้างขึ้นโดยอัตโนมัติ
เมื่อคอมไพล์แอปพลิเคชัน aapt จะสร้างคลาส R ซึ่งมีรหัสทรัพยากรสำหรับทรัพยากรทั้งหมดในไดเรกทอรี res/ สำหรับทรัพยากรแต่ละประเภทจะมีRคลาสย่อย เช่น R.drawable สำหรับทรัพยากรที่วาดได้ทั้งหมด และสำหรับทรัพยากรแต่ละรายการของประเภทนั้น จะมีจำนวนเต็มแบบคงที่
เช่น R.drawable.icon จำนวนเต็มนี้คือรหัสทรัพยากรที่คุณใช้เพื่อดึงข้อมูลทรัพยากรได้
แม้ว่าคลาส R จะเป็นที่ที่ระบุรหัสทรัพยากร แต่คุณไม่จำเป็นต้องค้นหารหัสทรัพยากรในคลาสนี้ รหัสทรัพยากรประกอบด้วยข้อมูลต่อไปนี้เสมอ
- ประเภททรัพยากร: ระบบจะจัดกลุ่มทรัพยากรแต่ละรายการเป็น "ประเภท" เช่น
string, drawableและlayoutดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทต่างๆ ได้ที่ภาพรวมประเภททรัพยากร - ชื่อทรัพยากร ซึ่งอาจเป็นชื่อไฟล์ที่ไม่รวมนามสกุลหรือ
ค่าในแอตทริบิวต์
android:nameของ XML หากทรัพยากรเป็นค่าอย่างง่าย เช่น สตริง
คุณเข้าถึงทรัพยากรได้ 2 วิธีดังนี้
- ในโค้ด: ใช้จำนวนเต็มแบบคงที่จากคลาสย่อยของคลาส
Rเช่นR.string.hellostringคือประเภททรัพยากร และhelloคือชื่อทรัพยากร มี Android API หลายรายการที่เข้าถึงทรัพยากรได้เมื่อคุณระบุรหัสทรัพยากรในรูปแบบนี้ ดูข้อมูลเพิ่มเติมได้ที่ส่วนเข้าถึงทรัพยากรในโค้ด - ใน XML: ใช้ไวยากรณ์ XML พิเศษที่สอดคล้องกับรหัสทรัพยากร
ที่กำหนดไว้ในคลาส
Rเช่น@string/hellostringคือประเภททรัพยากร และhelloคือชื่อทรัพยากร คุณสามารถใช้ไวยากรณ์นี้ในทรัพยากร XML ได้ทุกที่ที่คาดว่าจะต้องระบุค่าในทรัพยากร ดูข้อมูลเพิ่มเติมได้ที่ส่วนเข้าถึงทรัพยากรจาก XML
เข้าถึงทรัพยากรในโค้ด
คุณใช้ทรัพยากรในโค้ดได้โดยส่งรหัสทรัพยากรเป็นพารามิเตอร์ของเมธอด
เช่น คุณสามารถตั้งค่า ImageView เพื่อใช้
res/drawable/myimage.png โดยใช้ setImageResource ได้ดังนี้
Kotlin
val imageView = findViewById(R.id.myimageview) as ImageView
imageView.setImageResource(R.drawable.myimage)
Java
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
นอกจากนี้ คุณยังเรียกข้อมูลทรัพยากรแต่ละรายการได้โดยใช้วิธีการใน Resources
ซึ่งคุณจะรับอินสแตนซ์ได้ด้วย getResources
ไวยากรณ์
ไวยากรณ์ในการอ้างอิงทรัพยากรในโค้ดมีดังนี้
[<package_name>.]R.<resource_type>.<resource_name>
<package_name>คือชื่อของแพ็กเกจที่มีทรัพยากร อยู่ (ไม่จำเป็นต้องระบุเมื่ออ้างอิงทรัพยากรจากแพ็กเกจของคุณเอง)<resource_type>คือคลาสย่อยRสำหรับประเภททรัพยากร<resource_name>คือชื่อไฟล์ทรัพยากรที่ไม่มีนามสกุลหรือค่าแอตทริบิวต์android:nameในองค์ประกอบ XML สำหรับค่าที่เรียบง่าย
กรณีการใช้งาน
มีหลายวิธีที่ยอมรับพารามิเตอร์รหัสทรัพยากร และคุณสามารถเรียกข้อมูล
ทรัพยากรได้โดยใช้วิธีการใน Resources คุณรับอินสแตนซ์ของ
Resources ได้โดยใช้ Context.getResources
ตัวอย่างการเข้าถึงทรัพยากรในโค้ดมีดังนี้
Kotlin
// Load a background for the current screen from a drawable resource.
window.setBackgroundDrawableResource(R.drawable.my_background_image)
// Set the Activity title by getting a string from the Resources object, because
// this method requires a CharSequence rather than a resource ID.
window.setTitle(resources.getText(R.string.main_title))
// Load a custom layout for the current screen.
setContentView(R.layout.main_screen)
// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.hyperspace_in))
// Set the text on a TextView object using a resource ID.
val msgTextView = findViewById(R.id.msg) as TextView
msgTextView.setText(R.string.hello_message)
Java
// Load a background for the current screen from a drawable resource.
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;
// Set the Activity title by getting a string from the Resources object, because
// this method requires a CharSequence rather than a resource ID.
getWindow().setTitle(getResources().getText(R.string.main_title));
// Load a custom layout for the current screen.
setContentView(R.layout.main_screen);
// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.hyperspace_in));
// Set the text on a TextView object using a resource ID.
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);
เข้าถึงทรัพยากรจาก XML
คุณกำหนดค่าสำหรับแอตทริบิวต์และองค์ประกอบ XML บางอย่างได้โดยใช้การอ้างอิงถึง ทรัพยากรที่มีอยู่ คุณมักจะทำเช่นนี้เมื่อสร้างไฟล์เลย์เอาต์เพื่อระบุสตริงและรูปภาพสำหรับวิดเจ็ต
ตัวอย่างเช่น หากเพิ่ม Button ลงในเลย์เอาต์ ให้ใช้ทรัพยากร
สตริงสำหรับข้อความปุ่ม
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/submit" />
ไวยากรณ์
ต่อไปนี้คือไวยากรณ์ในการอ้างอิงทรัพยากรในทรัพยากร XML
@[<package_name>:]<resource_type>/<resource_name>
<package_name>คือชื่อของแพ็กเกจที่มีทรัพยากรอยู่ (ไม่จำเป็นเมื่ออ้างอิงทรัพยากรจากแพ็กเกจเดียวกัน)<resource_type>คือคลาสย่อยRสำหรับประเภททรัพยากร<resource_name>คือชื่อไฟล์ทรัพยากรที่ไม่มีนามสกุลหรือค่าแอตทริบิวต์android:nameในองค์ประกอบ XML สำหรับค่าที่เรียบง่าย
กรณีการใช้งาน
ในบางกรณี คุณต้องใช้ทรัพยากรสำหรับค่าใน XML เช่น เพื่อใช้รูปภาพที่วาดได้กับวิดเจ็ต แต่คุณยังใช้ทรัพยากรใน XML ได้ทุกที่ที่ยอมรับค่าอย่างง่าย ตัวอย่างเช่น หากคุณมีไฟล์ทรัพยากรต่อไปนี้ ซึ่งมีทรัพยากรสีและทรัพยากรสตริง
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="opaque_red">#f00</color>
<string name="hello">Hello!</string>
</resources>
คุณใช้แหล่งข้อมูลเหล่านี้ในไฟล์เลย์เอาต์ต่อไปนี้เพื่อตั้งค่าสีข้อความ และสตริงข้อความได้
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="@string/hello" />
ในกรณีนี้ คุณไม่จำเป็นต้องระบุชื่อแพ็กเกจใน การอ้างอิงทรัพยากร เนื่องจากทรัพยากรมาจากแพ็กเกจของคุณเอง หากต้องการอ้างอิงทรัพยากรของระบบ คุณต้องระบุชื่อแพ็กเกจตามที่แสดงในตัวอย่างต่อไปนี้
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@android:color/secondary_text_dark"
android:text="@string/hello" />
คุณยังใช้ทรัพยากรใน XML เพื่อสร้างชื่อแทนได้ด้วย ตัวอย่างเช่น คุณสามารถสร้าง ทรัพยากรที่วาดได้ซึ่งเป็นชื่อแทนของทรัพยากรที่วาดได้อีกรายการหนึ่ง ดังนี้
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/other_drawable" />
แม้จะฟังดูซ้ำซ้อน แต่ก็มีประโยชน์มากเมื่อใช้ทรัพยากรทางเลือก ดูข้อมูลเพิ่มเติมได้ที่ส่วนเกี่ยวกับการสร้างทรัพยากรแทน
แอตทริบิวต์รูปแบบการอ้างอิง
แหล่งข้อมูลแอตทริบิวต์รูปแบบช่วยให้คุณอ้างอิงค่าของแอตทริบิวต์ในธีมที่ใช้ในปัจจุบันได้ การอ้างอิงแอตทริบิวต์รูปแบบช่วยให้คุณปรับแต่งลักษณะขององค์ประกอบ UI ได้โดยการจัดรูปแบบให้ตรงกับรูปแบบมาตรฐานที่ธีมปัจจุบันมีให้ แทนที่จะระบุค่าที่ฮาร์ดโค้ด การอ้างอิงแอตทริบิวต์รูปแบบ โดยพื้นฐานแล้วหมายความว่า "ใช้รูปแบบที่กำหนดโดยแอตทริบิวต์นี้ใน ธีมปัจจุบัน"
หากต้องการอ้างอิงแอตทริบิวต์รูปแบบ ไวยากรณ์ของชื่อจะเกือบเหมือนกับ
รูปแบบทรัพยากรปกติ แต่ให้ใช้เครื่องหมายคำถาม (?) แทนสัญลักษณ์ "at" (@) ส่วนประเภททรัพยากรจะระบุหรือไม่ก็ได้ ดังนั้นไวยากรณ์การอ้างอิงจึงเป็นดังนี้
?[<package_name>:][<resource_type>/]<resource_name>
ตัวอย่างเช่น คุณอ้างอิงแอตทริบิวต์เพื่อตั้งค่าสีข้อความให้ ตรงกับสีข้อความรองของธีมระบบได้ดังนี้
<EditText id="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="?android:textColorSecondary"
android:text="@string/hello_world" />
ในที่นี้ แอตทริบิวต์ android:textColor ระบุชื่อของแอตทริบิวต์สไตล์
ในธีมปัจจุบัน ตอนนี้ Android ใช้ค่าที่ใช้กับแอตทริบิวต์รูปแบบ android:textColorSecondary เป็นค่าสำหรับ android:textColor ในวิดเจ็ตนี้ เนื่องจากเครื่องมือทรัพยากรของระบบทราบว่า
ควรมีทรัพยากรแอตทริบิวต์ในบริบทนี้ คุณจึงไม่จำเป็นต้องระบุ
ประเภทอย่างชัดเจน ซึ่งก็คือ ?android:attr/textColorSecondary คุณยกเว้นประเภท attr ได้
เข้าถึงไฟล์ต้นฉบับ
แม้จะไม่ค่อยเกิดขึ้น แต่คุณอาจต้องเข้าถึงไฟล์และไดเรกทอรีต้นฉบับ หากคุณทำเช่นนั้น การบันทึกไฟล์ใน res/ จะใช้ไม่ได้ เนื่องจากวิธีเดียวในการอ่านทรัพยากรจาก res/ คือการใช้รหัสทรัพยากร แต่คุณสามารถ
บันทึกทรัพยากรในไดเรกทอรี assets/ แทนได้
ระบบไม่กำหนดรหัสทรัพยากรให้กับไฟล์ที่บันทึกไว้ในไดเรกทอรี assets/ ดังนั้นคุณจึงอ้างอิงไฟล์เหล่านั้นผ่านคลาส R หรือจากทรัพยากร XML ไม่ได้ แต่คุณสามารถค้นหาไฟล์ในไดเรกทอรี assets/ เหมือนระบบไฟล์ปกติและอ่านข้อมูลดิบโดยใช้ AssetManager แทน
อย่างไรก็ตาม หากคุณต้องการเพียงความสามารถในการอ่านข้อมูลดิบ (เช่น วิดีโอหรือไฟล์เสียง) ให้บันทึกไฟล์ในไดเรกทอรี res/raw/ และอ่านสตรีมของไบต์โดยใช้ openRawResource
เข้าถึงแหล่งข้อมูลของแพลตฟอร์ม
Android มีทรัพยากรมาตรฐานหลายอย่าง เช่น สไตล์ ธีม และเลย์เอาต์
หากต้องการเข้าถึงทรัพยากรเหล่านี้ ให้ระบุการอ้างอิงทรัพยากรด้วยandroidชื่อแพ็กเกจ เช่น Android มีทรัพยากรเลย์เอาต์ที่คุณใช้กับรายการใน ListAdapter ได้
Kotlin
listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray)
Java
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));
ในตัวอย่างนี้ simple_list_item_1 คือทรัพยากรเลย์เอาต์ที่แพลตฟอร์มกำหนดไว้สำหรับรายการใน ListView คุณสามารถใช้เลย์เอาต์นี้แทนการสร้างเลย์เอาต์ของคุณเองสำหรับรายการในลิสต์ได้
มอบความเข้ากันได้ของอุปกรณ์ที่ดีที่สุดด้วยทรัพยากร
เพื่อให้แอปของคุณรองรับการกำหนดค่าอุปกรณ์หลายแบบ คุณจึงต้องระบุทรัพยากรเริ่มต้นสำหรับทรัพยากรแต่ละประเภทที่แอปใช้เสมอ
เช่น หากแอปของคุณรองรับหลายภาษา ให้ใส่values/
ไดเรกทอรี (ที่บันทึกสตริง) โดยไม่มีตัวระบุภาษาและภูมิภาคเสมอ แต่หากคุณใส่ไฟล์สตริงทั้งหมดไว้ในไดเรกทอรีที่มีตัวระบุภาษาและภูมิภาค แอปจะขัดข้องเมื่อเรียกใช้ในอุปกรณ์ที่ตั้งค่าเป็นภาษาที่สตริงไม่รองรับ
ตราบใดที่คุณระบุvalues/ทรัพยากรเริ่มต้นvalues/ แอปก็จะทำงานได้อย่างถูกต้อง
แม้ว่าผู้ใช้จะไม่เข้าใจภาษาที่แอปแสดงก็ตาม ดีกว่าการ
ขัดข้อง
ในทำนองเดียวกัน หากคุณระบุทรัพยากรเลย์เอาต์ที่แตกต่างกันตามการวางแนวหน้าจอ ให้เลือกการวางแนวหนึ่งเป็นการวางแนวเริ่มต้น ตัวอย่างเช่น แทนที่จะระบุแหล่งข้อมูลเลย์เอาต์ใน layout-land/ สำหรับแนวนอนและ layout-port/ สำหรับแนวตั้ง ให้ปล่อยค่าเริ่มต้นไว้ เช่น layout/ สำหรับแนวนอนและ layout-port/ สำหรับแนวตั้ง
การระบุทรัพยากรเริ่มต้นมีความสำคัญไม่เพียงเพราะแอปอาจทำงานในการกำหนดค่าที่คุณไม่ได้คาดการณ์ไว้ แต่ยังเป็นเพราะ Android เวอร์ชันใหม่อาจเพิ่มตัวระบุการกำหนดค่าที่เวอร์ชันที่ต่ำกว่าไม่รองรับ หากคุณใช้ตัวระบุทรัพยากรใหม่ แต่ยังคงความเข้ากันได้ของโค้ดกับ Android เวอร์ชันที่ต่ำกว่า เมื่อ Android เวอร์ชันที่ต่ำกว่าเรียกใช้แอปของคุณ แอปจะขัดข้องหากคุณไม่ได้ระบุทรัพยากรเริ่มต้น เนื่องจาก Android เวอร์ชันดังกล่าวใช้ทรัพยากรที่ตั้งชื่อด้วยตัวระบุใหม่ไม่ได้
เช่น หากตั้งค่า minSdkVersion เป็น 4 และคุณมีทรัพยากรที่วาดได้ทั้งหมดที่ใช้โหมดกลางคืน (night หรือ notnight ซึ่งเพิ่มเข้ามาในระดับ API 8) อุปกรณ์ระดับ API 4 จะเข้าถึงทรัพยากรที่วาดได้ไม่ได้และจะเกิดข้อขัดข้อง ในกรณีนี้ คุณอาจต้องการให้ notnight เป็น
ทรัพยากรเริ่มต้น ดังนั้นให้ยกเว้นตัวระบุนั้นและใส่ทรัพยากร Drawable
ไว้ใน drawable/ หรือ drawable-night/
กล่าวโดยย่อคือ เพื่อให้มั่นใจว่าอุปกรณ์จะเข้ากันได้ดีที่สุด ให้ระบุทรัพยากรเริ่มต้นสำหรับทรัพยากรที่แอปของคุณต้องใช้ในการทำงานอย่างเหมาะสมเสมอ จากนั้นสร้าง ทรัพยากรสำรองสำหรับการกำหนดค่าอุปกรณ์ที่เฉพาะเจาะจงโดยใช้ตัวระบุ การกำหนดค่า
ข้อยกเว้นของกฎนี้คือ หาก minSdkVersion ของแอปมีค่าตั้งแต่ 4 ขึ้นไป คุณไม่จำเป็นต้องมีทรัพยากร Drawable เริ่มต้นเมื่อระบุทรัพยากร Drawable สำรองที่มีตัวระบุความหนาแน่นของหน้าจอ แม้จะไม่มีทรัพยากร Drawable เริ่มต้น Android ก็สามารถค้นหาความหนาแน่นของหน้าจอทางเลือกที่ตรงกันมากที่สุดและปรับขนาดบิตแมปได้ตามต้องการ อย่างไรก็ตาม เพื่อให้ได้รับประสบการณ์การใช้งานที่ดีที่สุดในอุปกรณ์ทุกประเภท ให้ระบุภาพวาดสำรองสำหรับความหนาแน่นทั้ง 3 ประเภท