Translate

วันเสาร์ที่ 25 พฤษภาคม พ.ศ. 2556

[Android] พัฒนาแอพจากแอพจริง Thai Pilot Pray (4)


ก่อนจะเริ่ม Coding เรามาพูดกันเรื่อง Activity, Intents และ Layout ของ android กันครับ ซึ่งเรื่องพวกนี้เป็นเรื่องที่ต้องเข้าใจก่อนพัฒนาแอพฯ บนระบบ android ครับ (แต่ไม่ต้องเข้าใจลึกก็ได้ครับ ผมเองก็ไม่ได้ลึกซึ้งอะไรเท่าไร ก็ทำแอพได้ครับ)

Activity
แปลตามตัวก็คือ กิจกรรม สำหรับในการพัฒนา android แล้ว กิจกรรมที่ว่านี้ก็จะเป็นการดำเนินการ (action) ต่างๆ ของแอพฯ ที่ทั้งตอบโต้ และไม่ตอบโต้กับผู้ใช้ครับ activity เป็น 1 ใน 4 ของ application components ซึ่งประกอบไปด้วย

  1. Activity
  2. Services
  3. Content Providers
  4. Broadcast receivers (Intents จะอยู่ในส่วนนี้ครับ) 
ใครที่อยากทราบรายละเอียดลึกๆ ก็ไปหาอ่านได้จากต้นฉบับที่นี่เลยครับ http://developer.android.com/guide/components/fundamentals.html



Intents
ตัวนี้อธิบายยากครับ -_-" เพราะ abstract มาก ผมจะอธิบายตามความหมายที่ผมเข้าใจนะครับ ซึ่งต้นฉบับมาจากนี่ครับ http://developer.android.com/reference/android/content/Intent.html

intents ตามความหมายมันคือ "เจตจำนง" ของสิ่งต่างๆ ที่อยู่ในระบบ android ครับ ดูจะเวอร์เป็น The Matrix มั้ยครับ แต่ถ้าเข้าใจความหมายคำว่า "เจตจำนง" แล้วก็จะนึกออกครับว่า intents นั่นมีวัตถุประสงค์เพื่ออะไรในระบบ android
เจตจำนง คือ ความมุ่งหมาย ความประสงค์ มุ่งหวัง ตั้งใจ โดยตัว Intents จะถูกสร้างจาก application components ทั้ง 4 เพื่อให้กระทำการอย่างใดอย่างหนึ่ง อาจจะเป็นสิ่งเล็กๆ แค่ส่ง-รับ ค่า จาก activity หนึ่ง ไปอีก activity หนึ่ง หรือตัวแอพฯ ของเรา เรียกหา intents ที่ broadcast อยู่ในระบบ ซึ่งถูกสร้างจากแอพฯ อื่นๆ  แล้วเอามันมาใช้งานก็ได้ เช่น intents share ที่จะ share สิ่งที่เราต้องการไปยังแอพฯ อื่นๆ อย่าง facebook เป็นต้น

intents ประกอบไปด้วย 2 ส่วน คือ action และ data ครับ


Layout
ปัญหาลำดับต้นๆ ของผู้พัฒนา android คือ fragmentation หรือ device ที่มีขนาดจอหลากหลายมากในโลก เพราะฉะนั้น concept ของการพัฒนาแอพฯ แอนดรอย์ ก็จะเป็นไปในแนวทางเดียวกับเว็บครับ คือ ควรยืดหยุ่น และรองรับหน้าจอที่แตกต่างกันให้มากที่สุดเท่าที่จะทำได้ 


แนวทางหนึ่งที่ผมใช้แก้ปัญหาดังกล่าวก็คือ การสร้าง folder สำหรับ layout อันหลากหลายไว้ให้มากที่สุด เท่าที่จะมากได้

จากภาพ จะเห็นว่า ใน folder res มี folder ที่นำหน้าด้วย layout หลายตัวทีเดียว นี้เป็นอีกวิธีหนึ่งที่ได้ผลพอสมควรครับ กับการสร้างแอพฯ เพื่อใช้กับขนาดหน้าจอที่หลากหลาย แต่ถ้าจะให้ดี ควรเพิ่มให้ครอบคลุมให้มากที่สุดครับ ก็คือ layout แล้วขีดกลาง ตามด้วยขนาด และก็ขีดกลาง ตามด้วยแนวการแสดงผล เช่น layout-small-land จะหมายถึง layout สำหรับขนาดหน้าจอขนาดเล็กแบบแนวนอน 

ก็ขึ้นอยู่กับว่าเราจะตัดสินใจแยก layout ด้วยอะไรครับ หลักๆ จะมีอยู่ 2 แบบ คือ

  • xlarge screens are at least 960dp x 720dp
  • large screens are at least 640dp x 480dp
  • normal screens are at least 470dp x 320dp
  • small screens are at least 426dp x 320dp
แบบนี้เป็นแบบเก่าครับ แต่ถ้าจะพัฒนาตั้งแต่ android 3.2 ขึ้นไป ก็จะนิยมใช้แบบนี้ครับ

  • 320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
  • 480dp: a tweener tablet like the Streak (480x800 mdpi).
  • 600dp: a 7” tablet (600x1024 mdpi).
  • 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc)
คำว่า dp (density independence)  คือ ความหนาแน่นใน 1 จุด pixel นะครับ เพราะฉะนั้นเราจะนับหน้าจอเป็น Resolution แบบ pixel ไม่ได้ครับ เพราะเครื่องที่ pixel เท่ากัน แต่ความหนาแน่นไม่เท่ากัน การแสดงผลไม่เหมือนกันครับ

จะรวมใช้ทั้ง 2 แบบก็ได้นะครับ เพื่อการรองรับที่ดีขึ้น ส่วนการตั้งชื่อ folder layout ก็จะเป็นแบบนี้ครับ

ก็ตั้งมันเข้าไปครับ 555+ ตรงนี้ถ้าคนพัฒนามีคนที่ทำ graphic โดยเฉพาะก็จะสบายหน่อย คือ นั่งทำมันแต่ layout เนี่ยแหละครับ และถ้ารวม folder layout ทั้งหมดด้วยแล้ว (รวมแบบ layout-sw320dp ฯลฯ) สนุกเลยครับงานนี้ จุดนี้เป็นจุดที่ android แตกต่างจากการพัฒนา device ฝั่ง apple ครับ เพราะหน้าจอนั่นเอง

บทความหน้าจะเริ่ม coding Activity แรกกันเลยนะครับ พร้อมกันก็จะอธิบายตัวโค้ดของ Thai Pilot Pray ด้วยครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น