ข้ามไปเนื้อหาหลัก

Codename One เปิดตัว API เดียว รองรับ Widgets, Live Activities และ Dynamic Island

นักพัฒนา Java และ Kotlin สามารถสร้างวิดเจ็ตหน้าจอหลักและ Live Activities ได้แล้วผ่าน PR #5365 และคอมโพเนนต์ com.codename1.surfaces

เรียบเรียงโดย AI
Inewgen
26 Jul 2026ที่มา: Dev.to3 นาทีอ่าน (0 ครั้ง)อัปเดตล่าสุด 04 Aug 2026
แชร์
Codename One เปิดตัว API เดียว รองรับ Widgets, Live Activities และ Dynamic Island

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • Codename One เพิ่มแพ็กเกจ com.codename1.surfaces เพื่อรองรับวิดเจ็ตหน้าจอหลัก
  • รองรับหลากหลายแพลตฟอร์มทั้ง iOS, Android, เดสก์ท็อป และเว็บจากโค้ดเบสเดียว
  • ใช้โมเดลข้อมูลและไทม์ไลน์แทนการรันคอมโพเนนต์สดตลอดเวลา
  • รุ่นแรกยังไม่รองรับการอัปเดตผ่าน Push ในตัว

การรองรับวิดเจ็ตถือเป็นหนึ่งในคำขออันดับต้นๆ จากผู้ใช้งาน Codename One โดยทีมพัฒนาเคยปฏิเสธแนวคิดนี้มานานหลายปี เนื่องจากวิดเจ็ตจำเป็นต้องเรนเดอร์ภาพได้ในขณะที่อินเทอร์เฟซหลักของแอปพลิเคชันไม่ได้ทำงานอยู่ ซึ่งคอมโพเนนต์ปกติของ Codename One จำเป็นต้องพึ่งพาเรนเดอร์เลอร์, เธรดจ่ายอีเวนต์ และกราฟออบเจ็กต์สด แต่หน้าจอวิดเจ็ตกลับไม่มีสิ่งเหล่านี้เลย

สำหรับผู้ที่ไม่คุ้นเคย Codename One คือเฟรมเวิร์กโอเพนซอร์สสำหรับสร้างแอปพลิเคชันเนทีฟบน iOS, Android, เดสก์ท็อป และเว็บ ด้วยภาษา Java หรือ Kotlin เพียงชุดเดียว โดยชิ้นส่วนที่ขาดหายไปได้ถูกค้นพบหลังทีมงานพัฒนาฟีเจอร์เบื้องหลังให้แอปสามารถรีเฟรชข้อมูลได้โดยไม่ต้องแสดงหน้าจอ UI ซึ่งแก้ปัญหาฝั่งการอัปเดตได้สำเร็จ ส่วนฝั่งการเรนเดอร์ก็เป็นจริงได้เมื่อวิดเจ็ตเปลี่ยนสถานะเป็นข้อมูลแทนที่จะเป็นคอมโพเนนต์สด

smartphone interface widgets user interface design

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ผ่าน Pull Request #5365 แนวคิดดังกล่าวได้ถูกแปลงมาเป็นแพ็กเกจ com.codename1.surfaces ซึ่งเป็น API ชุดเดียวที่ครอบคลุมทั้งวิดเจ็ตหน้าจอหลัก, Live Activities, Dynamic Island, การแจ้งเตือนต่อเนื่องของ Android และหน้าต่างลอยบนเดสก์ท็อป โดยแอปพลิเคชันจะทำการเผยแพร่เลย์เอาต์ที่ทำการซีเรียลไลซ์ได้พร้อมกับไทม์ไลน์ของแผนผังสถานะ เพื่อให้แพลตฟอร์มนำไปเก็บบันทึกและเรนเดอร์ด้วยเทคโนโลยีพื้นผิวของตัวเอง

การแปลงคอมโพเนนต์ให้กลายเป็นข้อมูลซีเรียลไลซ์ได้ (Serializable layout and timeline) แทนที่จะรันไลฟ์ออบเจ็กต์ เป็นแนวทางสำคัญที่ทำให้เฟรมเวิร์กข้ามแพลตฟอร์มสามารถสื่อสารกับระบบปฏิบัติการมือถือยุคใหม่ได้อย่างมีประสิทธิภาพ เพราะระบบปฏิบัติการอย่าง iOS และ Android ไม่อนุญาตให้กระบวนการภายนอกรันโค้ด UI แบบเรียลไทม์บนหน้าจอโฮมได้ตลอดเวลา

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

ในแง่ของการทำงาน นักพัฒนาไม่สามารถผูก Java listener เข้ากับวิดเจ็ตได้โดยตรงเนื่องจากอาจไม่มีกระบวนการ Java ให้เรียกใช้งาน แต่จะใช้การกำหนดสตริง Action ID แทน เมื่อผู้ใช้แตะที่วิดเจ็ต ระบบจะเปิดแอปพลิเคชันขึ้นมาพร้อมกับส่งการกระทำดังกล่าวหลังจากสตาร์ทอัปเสร็จสิ้น นอกจากนี้ตัวจำลอง (Simulator) ยังรองรับโมเดลเดียวกันนี้ โดยสามารถเข้าไปที่เมนู Widgets > Widgets Preview เพื่อตรวจสอบวิดเจ็ตแต่ละประเภท ดูไทม์ไลน์ ปรับเปลี่ยนขนาดและรูปแบบ รวมถึงทดลองคลิกแอคชันได้ทันทีโดยไม่ต้องคอมไพล์บิวด์สำหรับอุปกรณ์จริง

สำหรับการใช้งานบน iOS และ Android จะทำการคอมไพล์คอลเลกชันวิดเจ็ตเข้าไปในตัวแอปพลิเคชันเนทีฟ ทำให้ต้องประกาศประเภทของวิดเจ็ตไว้ล่วงหน้าผ่านไฟล์รีซอร์ส surfaces.json ดังตัวอย่าง:

  • ลงทะเบียนประเภทวิดเจ็ตด้วยรหัส delivery_status
  • กำหนดชื่อแสดงผลเป็น Delivery และคำอธิบาย Track your order
  • รองรับขนาด SMALL และ MEDIUM

การอ้างอิงแพ็กเกจ surfaces นี้ถือเป็นตัวคัดกรองการบิวด์ โดยแอปพลิเคชันที่ไม่เคยใช้งานจะไม่ได้รับส่วนขยาย WidgetKit, ตัวรับสัญญาณของ Android, App Group หรือทรัพยากร Surface แต่อย่างใด ส่วนการอัปเดตวิดเจ็ตแบบพุช (Push-driven updates) ยังไม่มีในเวอร์ชันนี้ โดยแอปจะเผยแพร่ไทม์ไลน์ผ่านการดึงข้อมูลเบื้องหลัง และ Live Activities จะยอมรับการอัปเดตที่ขับเคลื่อนโดยแอปพลิเคชันแทน ส่วนการส่งสถานะจากเซิร์ฟเวอร์และ Push Token ของ ActivityKit มีแผนจะพัฒนาเพิ่มเติมบนฟอร์แมตชุดเดียวกันในอนาคต

ที่มา: Dev.to

ความคิดเห็น

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

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้