การอัปเดต Jetpack WindowManager

ภาพโดย Gus Winkelman

โพสต์โดย Kenneth Ford และ Pietro Maggi

เรารู้สึกตื่นเต้นที่จะประกาศการเปิดตัวไลบรารี Jetpack WindowManager alpha02 ไลบรารี Jetpack WindowManager ช่วยให้คุณสร้างแอปที่ตระหนักถึงคุณสมบัติใหม่ของอุปกรณ์เช่นการพับและบานพับเพื่อให้คุณสามารถใช้ประโยชน์จากความเป็นไปได้ใหม่ ๆ ที่ไม่เคยมีมาก่อน ในขณะที่เราพัฒนาไลบรารีนี้เราได้นำความคิดเห็นของคุณมาพิจารณาและเรายังคงทำซ้ำใน API ในขณะที่อยู่ในเวอร์ชันอัลฟาเพื่อมอบพื้นผิว API ที่สะอาดและสมบูรณ์ยิ่งขึ้น นอกจากนี้เรายังได้ดูพื้นที่ต่างๆในพื้นที่ WindowManager ซึ่งเราสามารถมอบฟังก์ชันเพิ่มเติมได้และเรายินดีที่จะแจ้งให้ทราบว่าเรากำลังแนะนำ WindowMetrics เพื่อให้คุณใช้Android 11 API ใหม่เหล่านี้ได้โดยเริ่มจาก Android 4.1 (API ระดับ 16)

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

การสร้าง WindowManager

ขณะนี้มีตัวสร้างอย่างง่ายที่มีอาร์กิวเมนต์เดียวที่ชี้ไปที่บริบทของเอนทิตีภาพ (เช่นกิจกรรมปัจจุบัน):

ตัวสร้างดั้งเดิมยังคงมีอยู่ แต่ตอนนี้เลิกใช้งานแล้ว

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

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

เพิ่ม DisplayFeature แล้ว DeviceState เลิกใช้แล้ว

การเปลี่ยนแปลงที่สำคัญอีกประการหนึ่งคือการเลิกใช้DeviceStateคลาสพร้อมกับการเรียกกลับที่ใช้เพื่อแจ้งแอปพลิเคชันของคุณ การเลิกใช้งานนี้ทำขึ้นเพื่อมุ่งสู่ API ทั่วไปที่ช่วยให้ระบบส่งคืนข้อมูลเกี่ยวกับDisplayFeatureอินสแตนซ์ทั้งหมดที่มีให้สำหรับแอปของคุณแทนที่จะกำหนดสถานะอุปกรณ์โดยรวม เราวางแผนที่จะลบDeviceStateชั้นเรียนในไลบรารีในอนาคต

รุ่น alpha02 แนะนำDisplayFeatureคลาสใหม่พร้อมสัญญาการโทรกลับที่อัปเดตเพื่อแจ้งแอปพลิเคชันของคุณเมื่อมีDisplayFeatureการเปลี่ยนแปลง คุณสามารถลงทะเบียน / ยกเลิกการลงทะเบียนการโทรกลับโดยใช้วิธีการเหล่านี้:

WindowLayoutInfoมีรายชื่อของอินสแตนซ์ของDisplayFeatureที่อยู่ภายในหน้าต่าง

FoldingFeatureระดับดำเนินการDisplayFeatureอินเตอร์เฟซซึ่งรวมถึงข้อมูลเกี่ยวกับประเภทของคุณสมบัติเหล่านี้:

TYPE_FOLD
TYPE_HINGE

สถานะของคุณสมบัติการแสดงผลที่เป็นไปได้: แบนครึ่งเปิดและพลิกตามลำดับ

โปรดทราบว่าไม่มีสถานะที่เทียบเท่ากันสำหรับDeviceStateท่าPOSTURE_UNKNOWNและPOSTURE_CLOSED.

ในการเข้าถึงสถานะใหม่คุณสามารถใช้FoldingFeatureข้อมูลที่ส่งกลับไปยังการโทรกลับที่ลงทะเบียน:

คุณสามารถหาตัวอย่างเกี่ยวกับวิธีการใช้ข้อมูลนี้ในการที่กลุ่มตัวอย่าง

การลงทะเบียนโทรกลับที่ดีกว่า

นอกจากนี้เรายังได้ปรับปรุงความแข็งแกร่งของ API การเรียกกลับที่แสดงด้านบน ในไลบรารีเวอร์ชันก่อนหน้าหากแอปพลิเคชันกำลังลงทะเบียนการเรียกกลับก่อนที่หน้าต่างจะพร้อมใช้งานการดำเนินการนี้จะทำให้เกิดข้อยกเว้น

ใน Alpha02 เราได้เปลี่ยนพฤติกรรมนี้ คุณสามารถลงทะเบียนการเรียกกลับเหล่านี้ได้ทุกเมื่อที่เหมาะสมสำหรับสถาปัตยกรรมของคุณ ไลบรารีจะส่งข้อมูลเริ่มต้นWindowLayoutInfoเมื่อหน้าต่างพร้อมใช้งาน

กฎ R8

เราได้เพิ่มกฎ "keep" ลงในคอนฟิกูเรชันไลบรารี R8 เพื่อรักษาเมธอดและคลาสที่อาจถูกถอดออกเนื่องจากโครงสร้างองค์กรโมดูลภายใน กฎจะรวมเข้ากับการกำหนดค่า R8 ของแอปสุดท้ายโดยอัตโนมัติเพื่อหลีกเลี่ยงข้อขัดข้องที่เกิดขึ้นกับ alpha01

WindowMetrics

เนื่องจากรูปแบบการตั้งชื่อในอดีตและสถานะตัวจัดการหน้าต่างที่เป็นไปได้ที่แตกต่างกันการรับข้อมูลเกี่ยวกับขนาดหน้าต่างปัจจุบันของคุณใน Android อาจเป็นเรื่องยาก การเลิกใช้งานวิธีการบางอย่างใน Android 11 เช่นDisplay#getSizeและDisplay#getMetricsควบคู่ไปกับการใช้ขนาดหน้าต่างใน API ใหม่เน้นให้เห็นถึงแนวโน้มที่เพิ่มขึ้นของการเปลี่ยนจากแบบเต็มหน้าจอไปเป็นแบบหลายหน้าต่างและอินเทอร์เฟซที่ปรับเปลี่ยนได้บนอุปกรณ์ที่พับเก็บได้ เพื่อให้การเปลี่ยนแปลงนี้ง่ายขึ้นเราได้เพิ่มWindowMetrics APIใน Android 11

WindowMetricsช่วยให้คุณสืบค้นข้อมูลเกี่ยวกับสถานะหน้าต่างปัจจุบันของคุณและขนาดหน้าต่างสูงสุดสำหรับสถานะปัจจุบันของระบบได้อย่างง่ายดายก่อนที่โครงร่างแรกจะผ่านไป ตัวอย่างเช่นอุปกรณ์อย่าง Surface Duo มีการกำหนดค่าเริ่มต้นที่แอปเปิดบนหน้าจอเดียว แต่สามารถขยายเพื่อขยายทั้งสองหน้าจอและผ่านบานพับได้ ในสถานะเริ่มต้น "getMaximumWindowMetrics" จะรายงานขอบเขตของหน้าจอที่แอปเปิดอยู่ เมื่อแอปย้ายไปยังสถานะขยาย API จะส่งคืนขอบเขตที่แสดงสถานะใหม่ การให้ข้อมูลนี้เร็วที่สุดในระหว่าง onCreate จะให้ข้อมูลที่กิจกรรมของคุณอาจต้องทำการคำนวณหรือตัดสินใจเร็วพอที่จะทำให้คุณสามารถเลือกเค้าโครงที่เหมาะสมได้ในครั้งแรก

ผลลัพธ์ API จะไม่รวมข้อมูลเกี่ยวกับสิ่งที่ใส่เข้าไปในระบบเช่นแถบสถานะหรือแถบนำทางเนื่องจากค่าเหล่านี้ไม่สามารถใช้ได้ก่อนที่จะส่งผ่านเค้าโครงแรกสำหรับ Android ทุกเวอร์ชันที่เรารองรับ โพสต์บล็อกนี้โดย Chris Banes เป็นแหล่งข้อมูลที่ยอดเยี่ยมในการใช้ViewCompatเพื่อรับข้อมูลเกี่ยวกับสิ่งที่ใส่เข้าไปในระบบเมื่อพร้อมใช้งาน ขอบเขตเหล่านี้จะไม่ตอบสนองต่อการเปลี่ยนแปลงใด ๆ ในพารามิเตอร์การจัดวางที่อาจเกิดขึ้นเมื่อเลย์เอาต์ของคุณสูงเกินจริง

ในการเข้าถึง API เหล่านี้คุณต้องได้รับอินสแตนซ์ของอ็อบเจ็กต์ WindowManager ตามที่เราแสดงไว้ก่อนหน้านี้

จากตรงนี้คุณจะสามารถเข้าถึงWindowMetrics APIและสามารถเข้าถึงข้อมูลได้อย่างง่ายดายทั้งขนาดหน้าต่างปัจจุบันและสูงสุด

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

แม้ว่า API ของแพลตฟอร์ม Android 11 จะมี API เพื่อรับสิ่งที่ใส่เข้าไปในระหว่าง onCreate แต่เรายังไม่ได้นำสิ่งนี้ไปยังไลบรารี Jetpack WindowManager เนื่องจากเราต้องการทำความเข้าใจว่านักพัฒนาจะพบว่ามีประโยชน์อะไรในพื้นที่นี้ โปรดแจ้งให้เราทราบว่ามีค่าใดบ้างที่คุณต้องการก่อนการส่งผ่านเลย์เอาต์แรกหรือนามธรรมที่จะทำให้รูปแบบการเขียนโปรแกรมง่ายขึ้น

เราหวังว่าการมี API เหล่านี้พร้อมใช้งานสำหรับ Android เวอร์ชันเก่าจะช่วยให้คุณสร้างแอปที่ตอบสนองต่อการเปลี่ยนแปลงขนาดหน้าต่างและช่วยให้คุณย้ายข้อมูลออกจาก API ที่เลิกใช้งานบางส่วนที่กล่าวถึงข้างต้น

ติดต่อกัน

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

Suggested posts

10 ฟังก์ชัน Kotlin Extension ที่มีประโยชน์สำหรับ Android Developer

10 ฟังก์ชัน Kotlin Extension ที่มีประโยชน์สำหรับ Android Developer

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

แอนดรอยด์ | ทำไม Pixel Fold จึงจำเป็นต้องเกิดขึ้น

การอัปเดต Android ในอนาคตอาจแปลได้ไม่ดีบนอุปกรณ์ของบุคคลที่สาม

แอนดรอยด์ | ทำไม Pixel Fold จึงจำเป็นต้องเกิดขึ้น

Google จะนำเสนอการปรับแต่งซอฟต์แวร์แบบหน้าจอคู่และแบบพับได้อย่างมากสำหรับการอัปเดต Android ที่กำลังจะมีขึ้น และเป็นไปไม่ได้ที่จะแสดงสิ่งเหล่านี้ในอุปกรณ์ที่ผลิตโดย Samsung หรือบริษัทอื่นๆ เนื่องจาก Samsung ได้ปรับแต่ง One UI ให้รวมฟีเจอร์ที่เน้นการพับและอาจไม่ไปในทิศทางเดียวกับ Google

Related posts

อะไรทำให้พอดคาสต์มีอิทธิพล?

อะไรทำให้พอดคาสต์มีอิทธิพล?

เมื่อสัปดาห์ที่แล้วฉันสังเกตเห็นข่าวประชาสัมพันธ์ที่เผยแพร่ผ่าน PressGazette (เว็บไซต์ข่าวของสื่ออังกฤษ) บทความประกาศว่า Acast ซึ่งเป็นบริษัทโฮสติ้งและโฆษณาพอดคาสต์ของ Scandi จะเป็นผู้นำกลุ่มผู้เผยแพร่ "อาจมีอิทธิพลมากที่สุด" ในพอดคาสต์

"เปิดร่องลึกบาดาลมาเรียนา: เปิดเผยความจริงอันน่าสะพรึงกลัวของก้นบึ้ง"

"เปิดร่องลึกบาดาลมาเรียนา: เปิดเผยความจริงอันน่าสะพรึงกลัวของก้นบึ้ง"

บทนำ:ยินดีต้อนรับ ผู้อ่านผู้กล้าหาญ สู่การเดินทางที่จะพาเราไปสู่ความลึกที่มืดมนที่สุดบนโลกใบนี้ ในบล็อกนี้ เราเจาะลึกโลกอันน่าพิศวงของร่องลึกบาดาลมาเรียนา เปิดเผยความลับที่ซ่อนอยู่ และเปิดเผยความจริงอันน่าสะพรึงกลัวที่อยู่ใต้พื้นผิวของมัน

สองปีในการออกแบบ - ดี ไม่ดี และน่าเกลียด...

สองปีในการออกแบบ - ดี ไม่ดี และน่าเกลียด...

“หวัดดี Siri เล่น Me Dive โดย Olivia Dean” ในเดือนพฤษภาคม 2021 ฉันเริ่มฝึกงานที่ Future Academy Africa ในเมือง Akure ประเทศไนจีเรีย

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

ตัดตอนมาจาก Small, Sharp Software Tools โดย Brian P. Hogan

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

เมื่อคุณส่งคำขอไปที่ facebook.com คอมพิวเตอร์ของคุณจะค้นหาชื่อโดเมนเพื่อแปลชื่อโดเมนนั้นเป็นที่อยู่ IP เพื่อให้คอมพิวเตอร์ของคุณสามารถเชื่อมต่อได้