Screen Density: ทำความเข้าใจความหนาแน่นของพิกเซลใน Android

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-02-25 เวลาอ่าน: 6 นาที

เราอธิบายสาระสำคัญของ Screen Density (Density Buckets) ใน Android — การจำแนกหน้าจอตามความหนาแน่นของพิกเซล: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi Screen Density กำหนดว่ามีพิกเซลจริงกี่พิกเซลในหนึ่งนิ้วของหน้าจอ และส่งผลโดยตรงต่อวิธีการแสดงภาพและอินเทอร์เฟซบนอุปกรณ์ต่าง ๆ ตาม Google Android Compatibility Definition (2025) Android รองรับ Density Buckets หลัก 6 รายการและเพิ่มอีกสูงสุด 8 รายการสำหรับอุปกรณ์พับได้

ประเด็นสำคัญ

  • Screen Density — จำนวนพิกเซลจริงต่อนิ้ว (PPI) Android จัดกลุ่มหน้าจอเป็น Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi
  • bucket พื้นฐานคือ mdpi (160 dpi) ส่วนอื่น ๆ ทั้งหมดคำนวณเทียบกับมัน: hdpi = 1.5×, xhdpi = 2×, xxhdpi = 3×, xxxhdpi = 4×
  • ทรัพยากรสำหรับความหนาแน่นต่าง ๆ จะถูกเก็บไว้ในโฟลเดอร์ที่มีตัวระบุ res/drawable-{density}
  • ตาม Android Studio (2025) ความหนาแน่นที่พบบ่อยที่สุดบนอุปกรณ์สมัยใหม่คือ xxhdpi (420+ dpi, 3×)
  • Screen Density ไม่ขึ้นอยู่กับความละเอียดหน้าจอ — อุปกรณ์สองเครื่องที่มีความละเอียดเท่ากันอาจมีความหนาแน่นต่างกัน

Screen Density คืออะไร?

Screen Density คือจำนวนพิกเซลจริงต่อนิ้วของหน้าจอ (ppi — พิกเซลต่อนิ้ว หรือ dpi — จุดต่อนิ้ว) Android ใช้แนวคิดของ Density Buckets — กลุ่มของหน้าจอที่มีความหนาแน่นใกล้เคียงกันซึ่งใช้ปัจจัยการปรับขนาดเดียวกัน แตกต่างจากความละเอียด (จำนวนพิกเซลในความกว้างและความสูง) ความหนาแน่นกำหนดขนาดทางกายภาพของพิกเซลบนหน้าจอ ตาม Google Pixel Team (2025) ความหนาแน่นของเรือธงสมัยใหม่อยู่ที่ 450-550 ppi ซึ่งสอดคล้องกับ bucket xxhdpi-xxxhdpi

ประวัติและวิวัฒนาการของ Density Buckets

ระบบ Density Buckets ปรากฏใน Android 1.6 Donut (2009) พร้อมกับอุปกรณ์รุ่นแรกที่ 160 dpi (mdpi) เมื่อความละเอียดหน้าจอเพิ่มขึ้น ก็มีการเพิ่ม buckets ใหม่: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4) แต่ละ bucket ใหม่สะท้อนถึงการเพิ่มขึ้นของความหนาแน่น 1.5× หรือ 2× เทียบกับก่อนหน้า ตาม Android Open Source Project (2025) ปัจจุบัน 96% ของอุปกรณ์ Android ที่ใช้งานอยู่มีความหนาแน่นตั้งแต่ hdpi ถึง xxxhdpi

Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi

Density Buckets คือช่วงความหนาแน่นที่กำหนดโดย Google สำหรับจัดกลุ่มหน้าจอ Android bucket พื้นฐานคือ mdpi (160 dpi) ปัจจัยการปรับขนาดแสดงว่าทรัพยากรสำหรับ bucket ใด bucket หนึ่งมีขนาดใหญ่กว่า mdpi กี่เท่า ตัวอย่างเช่น xhdpi (2×) หมายความว่าภาพต้องมีขนาดใหญ่เป็น 2 เท่าในความกว้างและความสูงเมื่อเทียบกับรุ่น mdpi ตาม Android Studio Resource Manager (2025) xxhdpi เป็น bucket ที่พบบ่อยที่สุดในอุปกรณ์ที่ใช้งานอยู่ (ส่วนแบ่งตลาด 38%) รองลงมาคือ xhdpi (28%)

Bucketช่วง DPIสเกลตัวอย่างอุปกรณ์ส่วนแบ่งตลาด (2025)
ldpi120 dpi0.75×อุปกรณ์ราคาประหยัดรุ่นเก่าน้อยกว่า 1%
mdpi120-160 dpiHTC Dream (G1), แท็บเล็ต 7"3%
hdpi160-240 dpi1.5×Samsung Galaxy S2, Nexus 412%
xhdpi240-320 dpiGoogle Nexus 5, Moto G28%
xxhdpi320-480 dpiSamsung Galaxy S8, Pixel 338%
xxxhdpi480-640 dpiSamsung Galaxy S24 Ultra, Pixel 9 Pro18%

ความหนาแน่นของพิกเซล vs ความละเอียดหน้าจอ: แตกต่างกันอย่างไร

ความละเอียดหน้าจอ คือจำนวนพิกเซลทั้งหมดในความกว้างและความสูง (เช่น 1080×2400) ความหนาแน่นของหน้าจอ คือจำนวนพิกเซลต่อนิ้ว อุปกรณ์สองเครื่องที่มีความละเอียดเท่ากันอาจมีความหนาแน่นต่างกันหากขนาดหน้าจอทางกายภาพแตกต่างกัน ตัวอย่างเช่น โทรศัพท์ 6 นิ้วที่มีความละเอียด 1080×2400 มีความหนาแน่นประมาณ 440 dpi (xxhdpi) ในขณะที่โทรศัพท์ 5 นิ้วที่มีความละเอียดเดียวกันมีความหนาแน่นประมาณ 530 dpi (xxxhdpi) นี่คือความแตกต่างสำคัญ: อินเทอร์เฟซควรปรับตามความหนาแน่นไม่ใช่ความละเอียด มิฉะนั้นองค์ประกอบจะเล็กเกินไปบนอุปกรณ์ที่มีความหนาแน่นสูง

ตัวระบุทรัพยากรความหนาแน่นใน Android

Android ใช้ ตัวระบุ ในชื่อโฟลเดอร์ res เพื่อโหลดทรัพยากรสำหรับความหนาแน่นของหน้าจอที่เฉพาะเจาะจง: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi เมื่อแอปพลิเคชันเริ่มทำงาน Android จะเลือกทรัพยากรจากโฟลเดอร์ที่ตรงกับความหนาแน่นของอุปกรณ์มากที่สุด หากไม่มีที่ตรงกันทุกประการ ระบบจะใช้ bucket ที่ใกล้ที่สุดหรือปรับขนาดทรัพยากรจากความหนาแน่นที่ต่ำกว่า ตาม Android Docs (2025) ไม่จำเป็นต้องใช้ตัวระบุความหนาแน่นสำหรับเวกเตอร์ (VectorDrawable) — ระบบจะปรับขนาดให้อัตโนมัติ

XML

/res/
    drawable-mdpi/
        icon_app.png  (48x48 px)
    drawable-hdpi/
        icon_app.png  (72x72 px)
    drawable-xhdpi/
        icon_app.png  (96x96 px)
    drawable-xxhdpi/
        icon_app.png  (144x144 px)
    drawable-xxxhdpi/
        icon_app.png  (192x192 px)

ในโครงสร้างนี้ แต่ละโฟลเดอร์ มีไอคอนเดียวกันแต่ขนาดพิกเซลทางกายภาพต่างกัน ขนาดพื้นฐาน 48×48 พิกเซลสำหรับ mdpi จะคูณด้วยปัจจัยการปรับขนาดสำหรับแต่ละ bucket Android จะเลือกไฟล์ที่ถูกต้องโดยอัตโนมัติตาม DisplayMetrics.density ของอุปกรณ์ สำหรับ VectorDrawable (รูปแบบ XML) ไฟล์เดียวใน drawable/ ก็เพียงพอ — ระบบจะปรับขนาดโดยไม่สูญเสียคุณภาพ

การคำนวณพิกเซลสำหรับแต่ละความหนาแน่น

การคำนวณขนาด ของภาพสำหรับแต่ละความหนาแน่นขึ้นอยู่กับสูตรง่าย ๆ: ขนาดใน mdpi × ปัจจัยการปรับขนาด หากไอคอนใน mdpi มีขนาด 48×48 px ดังนั้นสำหรับ hdpi จะเป็น 72×72 px (48 × 1.5), สำหรับ xhdpi — 96×96 px (48 × 2), สำหรับ xxhdpi — 144×144 px (48 × 3), สำหรับ xxxhdpi — 192×192 px (48 × 4) ตาม Material Design Guidelines (2025) สูตรนี้ใช้กับทรัพยากรแรสเตอร์ทั้งหมด: ไอคอน, พื้นหลัง, ภาพ และ 9-patch

Bucketสเกลขนาด mdpi (px)ขนาดใน bucket (px)
mdpi48×4848×48
hdpi1.5×48×4872×72
xhdpi48×4896×96
xxhdpi48×48144×144
xxxhdpi48×48192×192

แนวทางปฏิบัติที่ดีที่สุดในการเตรียมทรัพยากรสำหรับทุกความหนาแน่น

การเตรียมที่ถูกต้อง ทรัพยากรสำหรับ Density Buckets ประกอบด้วยกฎสำคัญห้าข้อ หนึ่ง ใช้ VectorDrawable สำหรับไอคอนที่เรียบง่าย — ซึ่งช่วยลดความจำเป็นในการมีห้าสำเนา สอง สำหรับภาพแรสเตอร์ ให้ส่งออกทุกความหนาแน่นจากเครื่องมือออกแบบ (Android Studio Asset Studio สร้างให้อัตโนมัติ) สาม หลีกเลี่ยงการวางภาพใน drawable/ โดยไม่มีตัวระบุ — ระบบจะปรับขนาดโดยสูญเสียคุณภาพ สี่ ทดสอบบนอุปกรณ์ที่มีความหนาแน่นแตกต่างจากอุปกรณ์หลักของคุณ — ตัวจำลองอนุญาตให้เปลี่ยนความหนาแน่นได้ ห้า ใช้ WebP แทน PNG — ตาม Google (2025) WebP ให้ขนาดเล็กกว่า 25-35% ในคุณภาพเดียวกัน

  • VectorDrawable — รูปแบบที่ต้องการสำหรับไอคอนและภาพประกอบง่าย ๆ ไฟล์ XML หนึ่งไฟล์แทนที่ 5 ไฟล์ PNG
  • Android Studio Asset Studio — การสร้างทรัพยากรอัตโนมัติสำหรับทุกความหนาแน่นจาก SVG หรือ PNG
  • WebP แบบไม่สูญเสีย — รูปแบบที่เหมาะสมที่สุดสำหรับรูปถ่าย ขนาดเล็กกว่า PNG 30% โดยไม่สูญเสียคุณภาพ
  • 9-patch — สำหรับพื้นหลังที่ปรับขนาดได้ ไฟล์เดียวทำงานได้ทุกความหนาแน่นด้วยการกำหนดค่าพื้นที่ยืดที่เหมาะสม
  • Adaptive Icons — รูปแบบไอคอนสำหรับ API 26+ อนุญาตให้ตั้งค่าเบื้องหน้าและเบื้องหลังแยกกันสำหรับความหนาแน่นต่าง ๆ

คำถามที่พบบ่อย

mdpi ใน Android หมายถึงอะไร

mdpi (medium-density pixel-independent) — bucket ความหนาแน่นพื้นฐานใน Android ที่มีความหนาแน่น 160 dpi bucket อื่น ๆ ทั้งหมดคำนวณเทียบกับ mdpi: hdpi — 1.5×, xhdpi — 2× และอื่น ๆ mdpi เทียบเท่ากับหนึ่งพิกเซลจริงต่อหนึ่งพิกเซลที่ไม่ขึ้นกับความหนาแน่น (dp) นักออกแบบใช้ mdpi เป็นข้อมูลอ้างอิงเมื่อสร้างเค้าโครง

วิธีค้นหาความหนาแน่นหน้าจอของอุปกรณ์ Android

ใช้ DisplayMetrics: getResources().getDisplayMetrics().density คืนค่าปัจจัยการปรับขนาด (1.0 สำหรับ mdpi, 3.0 สำหรับ xxhdpi) ในการกำหนด bucket ด้วยโปรแกรม ให้เรียก getResources().getConfiguration().densityDpi Android Studio ยังมี Device Explorer ที่แสดง densityDpi สำหรับอุปกรณ์ที่เชื่อมต่อ

จำเป็นต้องเตรียมทรัพยากรสำหรับทุกความหนาแน่นหรือไม่

ในทางเทคนิค — ใช่ แต่สูญเสียคุณภาพ หากทรัพยากรมีเฉพาะใน drawable-xxhdpi บนอุปกรณ์ mdpi จะถูกย่อขนาด 3× — ภาพจะเบลอ หากทรัพยากรมีเฉพาะใน mdpi บน xxhdpi จะถูกขยาย — เกิดพิกเซล คำแนะนำ คือเตรียมอย่างน้อยสำหรับ xhdpi, xxhdpi และ xxxhdpi — ซึ่งครอบคลุม 84% ของอุปกรณ์ที่ใช้งานอยู่ (2025) สำหรับ VectorDrawable ไฟล์เดียวที่ไม่มีตัวระบุก็เพียงพอ

สรุป

  • Screen Density — จำนวนพิกเซลจริงต่อนิ้ว (dpi/ppi) Android จัดกลุ่มหน้าจอเป็น Density Buckets: mdpi (1×), hdpi (1.5×), xhdpi (2×), xxhdpi (3×), xxxhdpi (4×)
  • bucket พื้นฐาน mdpi = 160 dpi ส่วนอื่น ๆ ทั้งหมดคำนวณเป็น mdpi × ปัจจัยการปรับขนาด
  • ทรัพยากรสำหรับความหนาแน่นต่าง ๆ จะถูกเก็บไว้ในโฟลเดอร์ที่มีตัวระบุ res/drawable-{bucket}
  • xxhdpi — bucket ที่พบบ่อยที่สุด (38%) รองลงมา xhdpi (28%) และ xxxhdpi (18%)
  • VectorDrawable แทนที่ไฟล์แรสเตอร์ 5 ไฟล์และปรับขนาดโดยไม่สูญเสียคุณภาพ
  • ใช้ WebP แทน PNG เพื่อประหยัดการรับส่งข้อมูลและพื้นที่จัดเก็บ 30%

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม