กลับมาเรื่องของดีไซน์กันต่อบ้าง คราวนี้ก็เป็นเรื่องทฤษฎีเป็นหลักเหมือนเดิม คราวนี้ก็ขอเจาะลึกในเรื่องของหน้าจอที่เป็นปัญหาระดับชาติของแอนดรอยด์ เนื่องจากการที่อุปกรณ์แอนดรอยด์มีการ Fragment มากเกินไป หรือก็คือความแตกต่างของตัวเครื่องที่มีเยอะมากมาย โดยเฉพาะขนาดหน้าจอจะเห็นว่าขนาดหน้าจอบนแอนดรอยด์มีเยอะมาก ความละเอียดก็ด้วย อย่างเช่นขนาดหน้าจอ 1920 x 1080 บนหน้าจอขนาด 4.7 นิ้วกับ 5 นิ้ว
มีหลายๆคนบอกกับเจ้าของบล็อกว่า แอนดรอยด์ออกแบบตัวระบบมาในเรื่องนี้ไม่ดี เพราะบน Windows ยังไม่เห็นจะมีปัญหาแบบนี้เลย โปรแกรมมันก็รองรับได้
อาจจะดูเหมือนใช่ แต่จริงๆแล้ว Windows ไม่ได้รองรับเรื่องนี้เลย พวกโปรแกรมทั้งหมด สร้างมาที่ขนาดตายตัว ถ้าจอเล็กก็จะมีแถบเลื่อนให้ ถ้าใหญ่ก็แค่ขยาย ซึ่งไม่ใช่การทำงานแบบ Full Screen จริงๆเลย ถ้าการทำงานแบบ Full Screen จริงๆ ให้นึกถึงพวกเกม เปิดทีเต็มทั้งหน้าจอ แต่ถึงกระนั้นตัวเกมบน Windows ก็ไม่ได้รองรับกับหน้าจอทุกขนาดเสมอไป เพราะบางเกมปรับความละเอียดได้ไม่ครบทุกขนาด มีแต่ที่ผู้ทำกำหนดเท่านั้น และอีกอย่างหนึ่งก็คือให้ลองสังเกตุเครื่องที่จอเล็กประมาณ 13 นิ้ว แต่ใช้ความละเอียด 1920 x 1080 ได้ ถ้าใครเคยเล่น จะเห็นว่า UI ต่างๆบนจอ จะมีขนาดเล็กตามไปด้วย เนื่องมาจากการที่จอเล็กแต่ความละเอียดสูงนั่นเอง
• normal จะมีขนาดจออย่างน้อย 470 x 320 dp
• large จะมีขนาดจออย่างน้อย 640 x 480 dp
• xlarge จะมีขนาดจออย่างน้อย 960 x 720 dp
ขนาดจอที่เท่ากัน แต่จอหนึ่งมีความละเอียดมากกว่า อีกจอน้อยกว่า จอที่มีความละเอียดมากก็จะมีความหนาแน่นของหน้าจอเยอะตาม ดังนั้นจึงเห็นว่า บนแอนดรอยด์จะไม่ได้สนใจเรื่องความละเอียดของจอ แต่ว่าจะมองเป็นค่าความหนาแน่นของหน้าจอไปเลยว่ามีค่าเท่าไร
• mdpi : มากกว่าหรือเท่ากับ 140 และน้อยกว่า 200
• hdpi : มากกว่าหรือเท่ากับ 200 และน้อยกว่า 280
• xhdpi : มากกว่าหรือเท่ากับ 280 ขึ้นไป
ผู้ที่หลงเข้ามาอ่านอาจจะรู้มาบ้างแล้วว่ามี 4 แบบ แต่จริงๆแล้ว นี่คือ Density แบบเก่า ที่ตอนนี้ได้เปลี่ยนไปแล้ว ในล่าสุดนี้จะแบ่งค่าความหนาแน่นของจอออกเป็น 6 แบบ คือ ldpi, mdpi, tvdpi, hdpi, xhdpi และ xxxhdpi เพิ่มมาอีกสามขนาด
ส่วน xxxhdpi มาพร้อมกับ Android 4.4 ซึ่งทาง Android ได้ทำเตรียมพร้อมไว้ เพราะในตอนนี้มือถือที่มี Density ระดับ xxhdpi เป็นเรื่องปกติแล้ว (แม้แต่ Nexus 5 ก็เช่นกัน) และเมื่อมีการแข่งขันทางเทคโนโลยีมือถือในรุ่นใหม่ๆมากขึ้นเรื่อยๆ จึงไม่แปลกเลยที่จะมีมือถือที่มีหน้าจอความละเอียดสูงกว่า 1920x1080 จึงทำให้ xxxhdpi ถูกกำเนิดขึ้นมาเพื่อรับมือกับความละเอียดระดับนี้
• mdpi : มากกว่าหรือเท่ากับ 140 และน้อยกว่า 186.5
• tvdpi : มากกว่าหรือเท่ากับ 186.5 และน้อยกว่า 227
• hdpi : มากกว่าหรือเท่ากับ 227 และน้อยกว่า 280
• xhdpi : มากกว่าหรือเท่ากับ 280 และน้อยกว่า 400
• xxhdpi : มากกว่าหรือเท่ากับ 400 และน้อยกว่า 560
• xxxhdpi : มากกว่า 560 ขึ้นไป
Size และ Density กับการออกแบบ
ทีนี้เวลาจะออกแบบ UI ก็ต้องพิจารณาถึง Size และ Density ด้วย เมื่อหาความเป็นไปได้ของ Size และ Density จะได้ 4 x 7 = 35 แบบ
small-ldpi, small-mdpi, small-tvdpi, small-hdpi, small-xhdpi, small-xxhdpi, small-xxxhdpi
normal-ldpi, normal-mdpi, normal-tvdpi, normal-hdpi, normal-xhdpi, normal-xxhdpi, normal-xxxhdpi
large-ldpi, large-mdpi, large-tvdpi, large-hdpi, large-xhdpi, large-xxhdpi, large-xxxhdpi
xlarge-ldpi, xlarge-mdpi, xlarge-tvdpi, xlarge-hdpi, xlarge-xhdpi, xlarge-xxhdpi, xlarge-xxxhdpi
ผู้ที่หลงเข้ามาอ่านอาจจะอึ่งว่าต้องมานั่งทำทั้ง 35 รูปแบบเลยหรือ? ซึ่งในความเป็นจริงแล้ว บางอันก็สามารถตัดออกไปได้เหมือนกัน เพราะไม่มีผู้ผลิตรายไหนบ้าจี้ทำมือถือที่มีขนาดจอ 3 นิ้ว มีความละเอียด 800 x 480 (small-xhdpi) อยู่แล้ว จอมันเล็กเกิน จึงไม่มีความจำเป็นต้องทำความละเอียดให้สูงขนาดนั้น และ large-small จะเป็นสำหรับ Tablet รุ่นเก่าๆ 7 นิ้ว 800 x 480 ถ้าไม่ซีเรียสว่าแอปฯ ต้องรองรับเครื่องเก่าๆพวกนี้ก็ตัดออกได้
ถึงแม้ว่าจะตัดอันที่ไม่จำเป็นออกแล้ว แต่ว่าก็ยังเยอะอยู่ดี ซึ่งจริงๆแล้วเจ้าของบล็อกมีวิธีที่ไม่ต้องทำให้ครบทุกขนาด แต่เจ้าของบล็อกยังไม่อธิบายนะ ไว้คราวหน้า เดี๋ยวเยอะ เพียงแค่อยากจะให้รู้ถึงขนาดหน้าจอที่เป็นไปได้ทั้งหมด เพื่อให้เข้าใจก่อนว่าหน้าจอมีการแบ่งออกเป็นแบบนี้
สำหรับ Samsung Galaxy Y จะเห็นว่ามีขนาดหน้าจอแค่ 3 นิ้ว คำนวณ Density ของจอออกมาจะได้เป็น 133.33 dpi ก็จะเป็น ldpi สำหรับขนาดหน้าจอ 320 x 240 px เมื่อคำนวณเป็น dp จะได้เป็น 426.67 x 320 dp จึงเป็น small สรุปคือเป็นเครื่องขนาด small-ldpi
สำหรับ LG Nexus 4 จะเห็นว่าขนาดหน้าจอเป็น 4.7 นิ้ว คำนวณ Density ได้เป็น 317.60 dpi ก็จะคือ xhdpi สำหรับขนาดหน้าจอ 1280 x 768 px เมื่อคำนวณเป็น dp จะได้ 640 x 384 dp จึงเป็น normal ดังนั้นก็สรุปได้ว่าเป็น normal-xhdpi
สำหรับ Galaxy Note 10.1 มีขนาดหน้าจอ 10.1 นิ้ว พอคำนวณ Density ได้แค่ 149.45 dpi จะได้เป็น mdpi และมีขนาดหน้าจอ 1280 x 800 px เมื่อคำนวณเป็นหน่วย dp จะได้เป็น 1280 x 800 dp จึงมีขนาดเป็น xlarge ดังนั้นสรุปได้ว่าเป็น xlarge-mdpi
เมื่อผู้ที่หลงเข้ามาอ่านรู้เรื่องของ Size และ Density แล้ว พอเข้าสู่เรื่องของการออกแบบหน้าตาแอปพลิเคชัน ก็จะเข้าใจได้ง่ายขึ้นในการออกแบบหน้าจอแต่ละขนาด
สำหรับบทความนี้จะมีเรื่องต่ออีกเรื่องหนึ่งด้วยนะ [Android Design] แท้จริงแล้วหน่วย dp คืออะไร? จะได้เข้าใจในเรื่องการออกแบบแอปฯ มากขึ้น