ในทุกวันนี้ตลาดของมือถือแอนดรอยด์เริ่มมีการเปลี่ยนแปลงอยู่ตลอดเวลา ในยามที่ซักแบรนด์จะเปิดตัว Smartphone รุ่นใหม่ ก็มักจะมาพร้อมกับฟีเจอร์และสเปคที่มีการอัปเดตไปตามยุคสมัย แต่สิ่งหนึ่งที่น่าสนใจในช่วงนี้ก็คือเทรนด์ของ Screen Ratio (สัดส่วนหน้าจอ) ที่ไม่ใช่ 16:9 กันอีกต่อไป จนเจ้าของบล็อกรู้สึกอยากจะหยิบมาพูดถึงว่ามีอะไรที่นักพัฒนาจะต้องรู้บ้าง

ลาก่อนหน้าจอ 16:9

ในช่วงแรกๆของเทรนด์นี้จะเริ่มจาก LG G6 กับ Samsung Galaxy S8 ที่แหวกแนวของ Screen Ratio ซึ่งในมุมมองของนักพัฒนาในตอนแรกๆก็อาจจะรู้สึกทะแม่งๆอยู่พอสมควร แต่ทว่าเมื่อเวลาผ่านไปเรื่อยๆก็เริ่มเห็นว่ามันไม่ใช่แค่เทรนด์ที่จะมาแล้วก็ผ่านไปแล้วล่ะ เพราะว่าหลายๆแบรนด์ต่างก็พากันทำ Screen Ratio ที่ไม่ใช่ 16:9 อีกต่อไป เพื่ออำนวยความสะดวกให้กับผู้ใช้ที่สามารถเห็นข้อมูลบนหน้าจอได้เยอะขึ้น

แล้วมีหน้าจอแบบไหนบ้าง?

ถึงแม้ว่าหลายๆแบรนด์จะพากันทำหน้าจอที่ไม่ใช่ 16:9 เหมือนๆกัน แต่ละรุ่นแต่ละแบรนด์ก็ไม่ได้ใช้ Screen Ratio เหมือนกันอยู่ดี เพราะมีทั้ง 18:9, 18.5:9, 21:9 ไปจนถึง 25:9 ดังนั้นในมุมมองของนักพัฒนาไม่ควรยึดติดเฉพาะแค่ Screen Ratio ตัวไหนตัวหนึ่งเท่านั้น

แล้วนักพัฒนาต้องทำอะไรเพิ่มบ้าง?

หลักๆก็เป็นเรื่อง Layout น่ะแหละ ที่ต้องทำให้รองรับกับหน้าจอเหล่านี้ ซึ่งไม่น่าจะมีปัญหาอะไรถ้านักพัฒนาอิงตามบทความ แบ่ง Layout ให้รองรับหน้าจอทุกขนาดด้วย Configuration Qualifier กันเถอะ เพราะสุดท้ายแล้วเครื่องเหล่านี้ก็ยังอยู่ระหว่าง sw360dp และ sw411dp อยู่ดี

โดยปกติแล้วเมื่อเปิดแอปบนหน้าจอเหล่านี้ มักจะถูกบังคับให้แสดงเป็น 16:9 เพื่อป้องกันแอปหลายๆตัวแสดง Layout เพี้ยน เพราะยังไม่ได้ทำให้รองรับ ดังนั้นนักพัฒนาอยากทำให้รองรับก็ควรเพิ่ม Metadata ไว้ใน Android Manifest เพื่อบอกให้แต่ละเครื่องรู้ด้วย

<!-- AndroidManifest.xml -->
<manifest ...>

    <application ...>

        ...

        <meta-data
            android:name="android.max_aspect"
            android:value="2.1" />

    </application>

</manifest>

ในกรณีที่ไม่ใส่ Metadata นี้ จะมีค่าเป็น 1.86 เสมอ ซึ่งเป็นของหน้าจอ 16 : 9 จึงเป็นที่มาว่าทำไมแอปที่ไม่ได้ใส่ Metadata ตัวนี้จะแสดงผลไม่เต็มจอ

นอกจากกำหนดด้วย Metadata แล้ว ถ้าผู้ที่หลงเข้ามาอ่านออกแบบ Layout ให้รองรับ Multi Window แล้วกำหนดค่าไว้ใน Android Manifest ดังนี้

<!-- AndroidManifest.xml -->
<manifest ...>

    <application ...
        android:resizeableActivity="true">

        ...

    </application>

</manifest>

ถ้ากำหนด resizeableActivity ก็ไม่จำเป็นต้องกำหนดค่า max_aspect ก็ได้ เพราะถือว่าแอปนั้นรองรับกับหน้าจอทุกขนาดทันที

โดยสามารถดูข้อมูลเพิ่มเติมสำหรับเรื่องนี้ได้ที่ Update your app to take advantage of the larger aspect ratio on new Android flagship devices [Android Developers Blog]

Update your app to take advantage of the larger aspect ratio on new Android flagship devices
Posted by Neto Marin , Developer Advocate, Google Play To deliver more engaging viewing experiences to their users, many Android OE...

และสิ่งที่ต้องระวังก็คือการดึงค่าหน้าจอจากเครื่องเหล่านี้มาใช้ในการคำนวณภายในแอป ว่าจะมีการคำนวณผิดพลาดหรือไม่

สรุป

เรื่องหน้าจอของอุปกรณ์แอนดรอยด์ถือเป็นเรื่องพื้นฐานที่นักพัฒนาต้องเข้าใจและทำให้แอปสามารถรองรับได้อยู่แล้ว แต่สิ่งที่ขาดไปไม่ได้เลยก็คือการหมั่นอัปเดตข่าวสารว่าทุกวันนี้เทคโนโลยีได้มีการเปลี่ยนแปลงอะไรบ้าง เพื่อทำให้นักพัฒนาแอนดรอยด์อย่างเราๆรู้ได้ว่าต้องทำอะไรเพิ่มบ้าง เพื่อให้แอปสามารถรองรับกับเครื่องรุ่นใหม่ๆได้ตลอดเวลา