น่าจะรู้จักกันอยู่แล้วกับหน่วย dp บนแอนดรอยด์ จะเห็นว่าเวลากำหนดขนาดในหน้า Layout ทีไร จะใช้หน่วยเป็น dp ตลอด (หน่วยอื่นก็ได้ แต่ dp ดีสุด) ในบทความนี้แหละ เจ้าของบล็อกจะมาแถลงไขเจ้าหน่วย dp นี้ ว่าแท้จริงแล้วมีที่มียังไง และมีดียังไง
สำหรับหน่วย dp เจ้าของบล็อกขอนิยามให้กับหน่วยนี้คร่าวๆว่า
เป็นหน่วยของความละเอียดหน้าจอ ที่สมมติขึ้นมาในแอนดรอยด์ โดยอิงจาก Resolution, Size และ Density ของจอบนเครื่องนั้นๆ
เป็นหน่วยของความละเอียดหน้าจอ ที่สมมติขึ้นมาในแอนดรอยด์ โดยอิงจาก Resolution, Size และ Density ของจอบนเครื่องนั้นๆ
• small จะมีขนาดจออย่างน้อย 426 x 320 dp
• normal จะมีขนาดจออย่างน้อย 470 x 320 dp
• large จะมีขนาดจออย่างน้อย 640 x 480 dp
• xlarge จะมีขนาดจออย่างน้อย 960 x 720 dp
ที่เจ้าของบล็อกบอกในข้างต้นนี้เป็นหน่วย dp นะ ไม่ใช่ px แต่เดี๋ยวจะเห็นว่าจาก px มาเป็น dp แล้วเป็นแบบนี้ได้ยังไง
การแปลงจากหน่วย px ไปเป็น dp
dp = px * (160 / dpi)
การแปลงจากหน่วย dp ไปเป็น px
px = dp * (dpi / 160)
• ldpi จะมี dpi เท่ากับ 120
• mdpi จะมี dpi เท่ากับ 160
• tvdpi จะมี dpi เท่ากับ 213
• hdpi จะมี dpi เท่ากับ 240
• xhdpi จะมี dpi เท่ากับ 320
• xxhdpi จะมี dpi เท่ากับ 480
• xxxhdpi จะมี dpi เท่ากับ 640
สมมติว่าลองคำนวณหาค่า dp จาก Samsung Galaxy Note 10.1 เดิมทีเครื่องนี้จะเป็น xlarge-mdpi ดังนั้นค่า dpi จะเท่ากับ 160 และเครื่องนี้มีความละเอียดหน้าจอเท่ากับ 1280 x 800
• 1280 px : 1280 x ( 160 / 160 ) = 1280 dp
• 800 px : 800 x ( 160 / 160 ) = 800 dp
คราวนี้ลองคำนวณหาค่า dp จาก Samsung Nexus 10 ดูบ้าง เดิมทีเครื่องนี้จะเป็น xlarge-xhdpi ดังนั้นค่า dpi จะเท่ากับ 320 และเครื่องนี้มีความละเอียดหน้าจอเท่ากับ 2560 x 1600
• 2560 px : 2560 x ( 160 / 320 ) = 1280 dp
• 1600 px : 1600 x ( 160 / 320 ) = 800 dp
จะเห็นว่ามีขนาดหน้าจอเป็น 1280 x 800 dp ซึ่งมีขนาดเท่ากับ Note 10.1 ทีเป็น xlarge เหมือนกัน
ก็จะเห็นว่าค่า dp ด้านที่น้อยสุดจะมีค่าเป็น 800 dp เหมือนกัน แต่สำหรับค่า dp ขั้นต่ำสุดของ xlarge จะเป็น 720 dp เครื่องที่ยกตัวอย่างมาก็มีขนาดใหญ่กว่าขั้นต่ำเล็กน้อย ดังนั้นเวลาออกแบบหน้า UI ของแอปพลิเคชันสำหรับ xlarge ก็ให้อิงจากด้านที่สั้นที่สุดว่าไม่ควรจะเกิน 720 dp เครื่องที่มีด้านสั้นที่สุด 800 dp ก็ยังเปิดได้ไม่เพี้ยน จะมีพื้นที่ว่างข้างๆแทน เพราะขนาดที่ใหญ่กว่า
ก่อนจะจบบทความนี้ ลองยกตัวอย่างเครื่องที่เป็น normal บ้าง เพราะขนาด normal จะเห็นความแตกต่างของขนาดหน้าจอ px ได้ง่าย
จะเห็นว่า แต่ละเครื่องจะใกล้เคียงกัน โดยจะเป็น 320 กับ 360 ถ้าจะสร้าง Layout ให้รองรับทุก Density ของขนาด normal ก็ควรจะอยู่ในขนาด 420 x 320 dp หรือว่าจะให้เกิน 420 dp ก็ได้ แล้วใช้ Scroll View ให้เลื่อนขึ้นลง แต่ความกว้างห้ามเกิน 320 dp ก็จะออกแบบ Layout ให้รองรับกับ Normal ได้ทุก Density แล้ว