ข่าวสารผลิตภัณฑ์
เตรียมแอปให้พร้อมสำหรับการเปลี่ยนแปลงความสามารถในการปรับขนาดและการวางแนวใน Android 17
ใช้เวลาอ่าน 6 นาที
เมื่อเปิดตัว Android 16 ในปี 2025 เราได้แชร์วิสัยทัศน์เกี่ยวกับระบบนิเวศของอุปกรณ์ที่แอปจะปรับให้เข้ากับหน้าจอทุกประเภทได้อย่างราบรื่น ไม่ว่าจะเป็นโทรศัพท์ อุปกรณ์พับได้ แท็บเล็ต เดสก์ท็อป จอแสดงผลในรถยนต์ หรือ XR ผู้ใช้คาดหวังให้แอปของตนทำงานได้ทุกที่ ไม่ว่าจะเป็นการทำงานหลายอย่างพร้อมกันบนแท็บเล็ต การกางอุปกรณ์เพื่ออ่านอย่างสะดวกสบาย หรือการเรียกใช้แอปในสภาพแวดล้อมหน้าต่างเดสก์ท็อป ผู้ใช้ต่างคาดหวังให้ UI เติมเต็มพื้นที่แสดงผลที่มีอยู่และปรับให้เข้ากับท่าทางของอุปกรณ์
เราได้เปิดตัวการเปลี่ยนแปลงที่สำคัญใน API การวางแนวและความสามารถในการปรับขนาดเพื่ออำนวยความสะดวกในการทำงานแบบปรับเปลี่ยนได้ พร้อมทั้งมีตัวเลือกการเลือกไม่ใช้ชั่วคราวเพื่อช่วยให้คุณทำการเปลี่ยนแปลงได้ เราเห็นนักพัฒนาแอปจํานวนมากปรับตัวให้เข้ากับการเปลี่ยนแปลงนี้ได้สําเร็จแล้วเมื่อกำหนดเป้าหมายเป็น API ระดับ 36
ตอนนี้เมื่อเปิดตัว Android 17 เบต้า เราจะเข้าสู่ระยะถัดไปของแผนงานแบบปรับอัตโนมัติ นั่นคือ Android 17 (ระดับ API 37) จะนำการเลือกไม่ใช้ของนักพัฒนาแอปสำหรับข้อจำกัดด้านการวางแนวและความสามารถในการปรับขนาดในอุปกรณ์หน้าจอขนาดใหญ่ออก (sw > 600 dp) เมื่อกำหนดเป้าหมายเป็นระดับ API 37 แอปของคุณต้องปรับให้เข้ากับขนาดการแสดงผลที่หลากหลายได้
การเปลี่ยนแปลงลักษณะการทำงานนี้ช่วยให้มั่นใจได้ว่าระบบนิเวศของ Android จะมอบประสบการณ์การใช้งานที่สอดคล้องกันและมีคุณภาพสูงในอุปกรณ์ทุกรูปแบบ
มีอะไรเปลี่ยนแปลงใน Android 17
แอปที่กำหนดเป้าหมายเป็น Android 17 ต้องตรวจสอบว่าแอปเข้ากันได้กับการเลิกใช้แอตทริบิวต์ในไฟล์ Manifest และ API รันไทม์ที่เปิดตัวใน Android 16 เราเข้าใจดีว่าการเปลี่ยนแปลงนี้อาจเป็นการเปลี่ยนแปลงครั้งใหญ่สำหรับแอปบางแอป จึงได้รวมแนวทางปฏิบัติแนะนำและเครื่องมือที่จะช่วยหลีกเลี่ยงปัญหาที่พบได้ทั่วไปไว้ในบล็อกโพสต์นี้
ตั้งแต่ Android 16 เป็นต้นมา เราไม่ได้ทำการเปลี่ยนแปลงใหม่ใดๆ แต่คุณจะเลือกไม่ใช้อีกต่อไปไม่ได้ โปรดทราบว่าเมื่อแอปทำงานบนหน้าจอขนาดใหญ่ (หน้าจอขนาดใหญ่หมายถึงขนาดที่เล็กกว่าของจอแสดงผลมีค่ามากกว่าหรือเท่ากับ 600 dp) ระบบจะไม่สนใจแอตทริบิวต์ Manifest และ API ต่อไปนี้
หมายเหตุ: ดังที่ได้กล่าวไว้ก่อนหน้านี้เกี่ยวกับ Android 16 การเปลี่ยนแปลงเหล่านี้จะไม่มีผลกับหน้าจอที่มีขนาดเล็กกว่า sw 600 dp หรือแอปที่จัดอยู่ในหมวดหมู่เกมตามค่าสถานะ android:appCategory
| แอตทริบิวต์/API ของไฟล์ Manifest | ค่าที่ระบบไม่สนใจ |
| screenOrientation | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
| setRequestedOrientation() | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
| resizeableActivity | ทั้งหมด |
| minAspectRatio | ทั้งหมด |
| maxAspectRatio | ทั้งหมด |
นอกจากนี้ ผู้ใช้ยังคงควบคุมได้ ในการตั้งค่าสัดส่วนภาพ ผู้ใช้สามารถเลือกใช้ลักษณะการทำงานที่แอปขอได้อย่างชัดเจน
เตรียมแอป
แอปจะต้องรองรับเลย์เอาต์แนวนอนและแนวตั้งสำหรับขนาดการแสดงผลในอัตราส่วนภาพเต็มรูปแบบที่ผู้ใช้เลือกใช้แอปได้ ซึ่งรวมถึงหน้าต่างที่ปรับขนาดได้ เนื่องจากจะไม่มีวิธีจำกัดอัตราส่วนภาพและการวางแนวเป็นแนวตั้งหรือแนวนอนอีกต่อไป
ทดสอบแอป
ขั้นตอนแรกคือการทดสอบแอปด้วยการเปลี่ยนแปลงเหล่านี้เพื่อให้แน่ใจว่าแอปทำงานได้ดีในจอแสดงผลทุกขนาด
ใช้ Android 17 Beta 1 กับโปรแกรมจำลอง Pixel Tablet และ Pixel Fold Series ใน Android Studio แล้วตั้งค่า targetSdkPreview = “CinnamonBun” หรือจะใช้เฟรมเวิร์กความเข้ากันได้ของแอปโดยเปิดใช้ Flag UNIVERSAL_RESIZABLE_BY_DEFAULT หากแอปยังไม่ได้กำหนดเป้าหมายเป็น API ระดับ 36
เรามีเครื่องมือเพิ่มเติมเพื่อให้มั่นใจว่าเลย์เอาต์จะปรับเปลี่ยนได้อย่างถูกต้อง คุณสามารถตรวจสอบ UI โดยอัตโนมัติและรับคำแนะนำเพื่อทำให้ UI ปรับเปลี่ยนได้มากขึ้นด้วย Compose UI Check และจำลองลักษณะการแสดงผลที่เฉพาะเจาะจงในการทดสอบโดยใช้ DeviceConfigurationOverride
สำหรับแอปที่จำกัดการวางแนวและสัดส่วนภาพในอดีต เรามักพบปัญหาเกี่ยวกับตัวอย่างกล้องที่เอียงหรือวางแนวผิด เลย์เอาต์ที่ยืดออก ปุ่มที่เข้าถึงไม่ได้ หรือการสูญเสียสถานะของผู้ใช้เมื่อจัดการการเปลี่ยนแปลงการกำหนดค่า
มาดูกลยุทธ์บางอย่างในการแก้ไขปัญหาที่พบบ่อยเหล่านี้กัน
ตรวจสอบว่ากล้องใช้งานร่วมกันได้
ปัญหาที่พบบ่อยในอุปกรณ์พับได้แนวนอนหรือสำหรับการคำนวณสัดส่วนภาพในสถานการณ์ต่างๆ เช่น การทำงานแบบหลายหน้าต่าง การแสดงหน้าต่างเดสก์ท็อป หรือจอแสดงผลที่เชื่อมต่อ คือเมื่อตัวอย่างกล้องปรากฏในลักษณะยืด หมุน หรือครอบตัด
ตรวจสอบว่าตัวอย่างกล้องไม่ได้ยืดหรือหมุน
ปัญหานี้มักเกิดขึ้นในอุปกรณ์หน้าจอขนาดใหญ่และอุปกรณ์แบบพับได้ เนื่องจากแอปจะถือว่าฟีเจอร์ของกล้อง (เช่น สัดส่วนภาพและการวางแนวเซ็นเซอร์) และฟีเจอร์ของอุปกรณ์ (เช่น การวางแนวอุปกรณ์และการวางแนวตามธรรมชาติ) มีความสัมพันธ์กันแบบตายตัว
หากต้องการให้ตัวอย่างกล้องปรับให้เข้ากับขนาดหรือการวางแนวของหน้าต่างได้อย่างถูกต้อง ให้ลองใช้ 4 วิธีต่อไปนี้
วิธีที่ 1: Jetpack CameraX (แนะนำ)
โซลูชันที่ง่ายและมีประสิทธิภาพที่สุดคือการใช้ไลบรารี Jetpack CameraX องค์ประกอบ UI ของ PreviewView ออกแบบมาเพื่อจัดการความซับซ้อนของการแสดงตัวอย่างทั้งหมดโดยอัตโนมัติ
-
PreviewViewปรับการวางแนวเซ็นเซอร์ การหมุนอุปกรณ์ และการปรับขนาดได้อย่างถูกต้อง -
PreviewView จะรักษาสัดส่วนภาพของรูปภาพจากกล้อง โดยปกติจะจัดกึ่งกลางและครอบตัด (
FILL_CENTER) -
คุณตั้งค่าประเภทการปรับขนาดเป็น
FIT_CENTERเพื่อใส่แถบดำด้านบนและด้านล่างของตัวอย่างได้หากต้องการ
ดูข้อมูลเพิ่มเติมได้ที่ใช้งานตัวอย่างในเอกสารประกอบของ CameraX
วิธีที่ 2: CameraViewfinder
หากใช้โค้ดเบส Camera2 ที่มีอยู่ CameraViewfinder library (เข้ากันได้แบบย้อนหลังกับ API ระดับ 21) ก็เป็นอีกหนึ่งโซลูชันที่ทันสมัย โดยจะช่วยให้การแสดงฟีดกล้องเป็นเรื่องง่ายด้วยการใช้ TextureView หรือ SurfaceView และใช้การเปลี่ยนรูปแบบที่จำเป็นทั้งหมด (สัดส่วนภาพ ขนาด และการหมุน) ให้คุณ
ดูข้อมูลเพิ่มเติมได้ในบล็อกโพสต์เปิดตัวช่องมองภาพของกล้องและคู่มือนักพัฒนาซอฟต์แวร์ตัวอย่างกล้อง
วิธีที่ 3: การติดตั้งใช้งาน Camera2 ด้วยตนเอง
หากใช้ CameraX หรือ CameraViewfinder ไม่ได้ คุณต้องคำนวณการวางแนวและสัดส่วนภาพด้วยตนเอง และตรวจสอบว่าการคำนวณได้รับการอัปเดตเมื่อมีการเปลี่ยนแปลงการกำหนดค่าแต่ละครั้ง
-
รับการวางแนวเซ็นเซอร์กล้อง (เช่น 0, 90, 180, 270 องศา) จาก
CameraCharacteristics - รับการหมุนหน้าจอปัจจุบันของอุปกรณ์ (เช่น 0, 90, 180, 270 องศา)
-
ใช้ค่าการหมุนจอแสดงผลและการวางแนวเซ็นเซอร์กล้องเพื่อกำหนดการเปลี่ยนรูปแบบที่จำเป็นสำหรับ
SurfaceViewหรือTextureView -
ตรวจสอบว่าสัดส่วนภาพของเอาต์พุต
Surfaceตรงกับสัดส่วนภาพของตัวอย่างกล้องเพื่อป้องกันไม่ให้เกิดการบิดเบือน
สำคัญ: โปรดทราบว่าแอปกล้องอาจทำงานในส่วนหนึ่งของหน้าจอ ไม่ว่าจะในโหมดหลายหน้าต่างหรือโหมดหน้าต่างเดสก์ท็อป หรือบนจอแสดงผลที่เชื่อมต่อ ด้วยเหตุนี้ จึงไม่ควรใช้ขนาดหน้าจอเพื่อกำหนดขนาดของช่องมองภาพของกล้อง แต่ให้ใช้เมตริกหน้าต่างแทน ไม่เช่นนั้น คุณอาจเห็นการแสดงตัวอย่างจากกล้องที่ยืดออก
ดูข้อมูลเพิ่มเติมได้ที่คู่มือนักพัฒนาซอฟต์แวร์ตัวอย่างกล้องและวิดีโอแอปกล้องของคุณในอุปกรณ์รูปแบบต่างๆ
วิธีที่ 4: ดำเนินการพื้นฐานของกล้องโดยใช้ Intent
หากไม่ต้องการฟีเจอร์กล้องมากมาย โซลูชันที่เรียบง่ายและตรงไปตรงมาคือการดำเนินการพื้นฐานของกล้อง เช่น การถ่ายรูปภาพหรือวิดีโอโดยใช้แอปพลิเคชันกล้องเริ่มต้นของอุปกรณ์ ในกรณีนี้ คุณสามารถใช้ Intent แทนการผสานรวมกับคลังกล้องได้เพื่อให้ดูแลรักษาและปรับเปลี่ยนได้ง่ายขึ้น
ดูข้อมูลเพิ่มเติมได้ที่เจตนาของกล้อง
หลีกเลี่ยง UI ที่ยืดออกหรือปุ่มที่เข้าถึงไม่ได้
หากแอปของคุณถือว่าอุปกรณ์มีการวางแนวที่เฉพาะเจาะจงหรือสัดส่วนการแสดงผลที่เฉพาะเจาะจง แอปอาจพบปัญหาเมื่อมีการใช้งานในการวางแนวหรือขนาดหน้าต่างต่างๆ
ตรวจสอบว่าปุ่ม ช่องข้อความ และองค์ประกอบอื่นๆ ไม่ได้ยืดออกบนหน้าจอขนาดใหญ่
คุณอาจตั้งค่าปุ่ม ช่องข้อความ และการ์ดเป็น fillMaxWidth หรือ match_parent ในโทรศัพท์จะดูดีมาก อย่างไรก็ตาม ในแท็บเล็ตหรืออุปกรณ์ที่พับได้ในแนวนอน องค์ประกอบ UI จะขยายไปทั่วทั้งหน้าจอขนาดใหญ่ ใน Jetpack Compose คุณสามารถใช้ตัวแก้ไข widthIn เพื่อกำหนดความกว้างสูงสุดสำหรับคอมโพเนนต์เพื่อหลีกเลี่ยงเนื้อหาที่ยืดออกได้
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize()
) {
Column(
modifier = Modifier
.widthIn(max = 300.dp) // Prevents stretching beyond 300dp
.fillMaxWidth() // Fills width up to 300dp
.padding(16.dp)
) {
// Your content
}
}
หากผู้ใช้เปิดแอปในแนวนอนบนอุปกรณ์พับได้หรือแท็บเล็ต ปุ่มการทำงาน เช่น บันทึกหรือเข้าสู่ระบบที่ด้านล่างของหน้าจออาจแสดงนอกหน้าจอ หากคอนเทนเนอร์เลื่อนไม่ได้ ผู้ใช้อาจถูกบล็อกไม่ให้ดำเนินการต่อ ใน Jetpack Compose คุณสามารถเพิ่มตัวแก้ไข verticalScroll ลงในคอมโพเนนต์ได้โดยทำดังนี้
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(16.dp)
)
การรวมข้อจำกัด max-width เข้ากับการเลื่อนแนวตั้งจะช่วยให้มั่นใจได้ว่าแอปจะยังคงใช้งานได้ ไม่ว่าขนาดหน้าต่างแอปจะกว้างหรือสั้นเพียงใดก็ตาม
ดูคำแนะนำเกี่ยวกับการสร้างเลย์เอาต์ที่ปรับตามอุปกรณ์
คงสถานะด้วยการเปลี่ยนแปลงการกำหนดค่า
การนำข้อจำกัดด้านการวางแนวและสัดส่วนภาพออกหมายความว่าขนาดหน้าต่างของแอปจะเปลี่ยนแปลงบ่อยขึ้นมาก ผู้ใช้อาจหมุนอุปกรณ์ พับ/กางออก หรือปรับขนาดแอปแบบไดนามิกในโหมดแยกหน้าจอหรือโหมดหน้าต่างเดสก์ท็อป
โดยค่าเริ่มต้น การเปลี่ยนแปลงการกำหนดค่าเหล่านี้จะทำลายและสร้างกิจกรรมขึ้นใหม่ หากแอปจัดการเหตุการณ์ในวงจรนี้ไม่ถูกต้อง ผู้ใช้จะได้รับประสบการณ์การใช้งานที่ไม่ดี โดยตำแหน่งการเลื่อนจะรีเซ็ตเป็นด้านบนสุด แบบฟอร์มที่กรอกไปครึ่งหนึ่งจะถูกล้าง และประวัติการนำทางจะหายไป แอปของคุณต้องรักษาสถานะไว้ตลอดการเปลี่ยนแปลงการกำหนดค่าเหล่านี้เพื่อให้มั่นใจว่าจะได้รับประสบการณ์การใช้งานแบบปรับเปลี่ยนที่ราบรื่น Jetpack Compose ช่วยให้คุณเลือกไม่สร้างใหม่ได้ และอนุญาตให้การเปลี่ยนแปลงขนาดหน้าต่างทำการ Recompose UI เพื่อแสดงพื้นที่ว่างใหม่แทน
ดูคำแนะนำเกี่ยวกับการบันทึกสถานะ UI
กำหนดเป้าหมายเป็น API ระดับ 37 ภายในเดือนสิงหาคม 2027
หากก่อนหน้านี้แอปของคุณเลือกไม่ใช้การเปลี่ยนแปลงเหล่านี้เมื่อกำหนดเป้าหมายเป็น API ระดับ 36 แอปจะได้รับผลกระทบจากการนำการเลือกไม่ใช้ Android 17 ออกหลังจากที่แอปกำหนดเป้าหมายเป็น API ระดับ 37 แล้วเท่านั้น เพื่อช่วยคุณวางแผนล่วงหน้าและทำการปรับเปลี่ยนที่จำเป็นกับแอป นี่คือไทม์ไลน์เมื่อการเปลี่ยนแปลงเหล่านี้จะมีผล
- Android 17: การเปลี่ยนแปลงที่อธิบายไว้ข้างต้นจะเป็นประสบการณ์พื้นฐานสำหรับอุปกรณ์หน้าจอขนาดใหญ่ (ความกว้างของหน้าจอที่เล็กที่สุด > 600 dp) สำหรับแอปที่กำหนดเป้าหมายเป็นระดับ API 37 นักพัฒนาแอปจะไม่มีตัวเลือกในการเลือกไม่ใช้
กำหนดเวลาสำหรับการกำหนดเป้าหมาย API ระดับหนึ่งๆ จะขึ้นอยู่กับ App Store สำหรับ Google Play แอปใหม่และการอัปเดตจะต้องกำหนดเป้าหมายเป็นระดับ API 37 ซึ่งจะทำให้ลักษณะการทำงานนี้เป็นข้อบังคับสำหรับการเผยแพร่ในเดือนสิงหาคม 2027
การเตรียมพร้อมสำหรับ Android 17
ดูการเปลี่ยนแปลงทั้งหมดที่จะส่งผลต่อแอปใน Android 17 ได้ที่หน้าการเปลี่ยนแปลงใน Android 17 หากต้องการทดสอบแอป ให้ดาวน์โหลด Android 17 เบต้า 1 และอัปเดตเป็น targetSdkPreview = “CinnamonBun” หรือใช้เฟรมเวิร์กความเข้ากันได้ของแอปเพื่อเปิดใช้การเปลี่ยนแปลงที่เฉพาะเจาะจง
อนาคตของ Android คือการปรับเปลี่ยน และเราพร้อมช่วยให้คุณไปถึงจุดนั้น ขณะเตรียมพร้อมสำหรับ Android 17 เราขอแนะนำให้คุณอ่านคำแนะนำเกี่ยวกับการสร้างเลย์เอาต์ที่ปรับเปลี่ยนได้และหลักเกณฑ์ด้านคุณภาพสำหรับหน้าจอขนาดใหญ่ แหล่งข้อมูลเหล่านี้ออกแบบมาเพื่อช่วยให้คุณจัดการรูปแบบของอุปกรณ์และขนาดหน้าต่างต่างๆ ได้อย่างมั่นใจ
อย่ารอช้า เริ่มเตรียมพร้อมสำหรับ Android 17 ได้ตั้งแต่วันนี้
อ่านต่อ
-
ข่าวสารผลิตภัณฑ์
เมื่อมีรูปแบบใหม่ๆ เช่น Pixel 10 Pro Fold เข้ามาในระบบนิเวศของ Android การพัฒนาแอปแบบปรับเปลี่ยนได้จึงเป็นสิ่งจำเป็นในการสร้างประสบการณ์ของผู้ใช้คุณภาพสูงในโทรศัพท์ แท็บเล็ต และอุปกรณ์พับได้
Fahd Imtiaz, Miguel Montemayor • ใช้เวลาอ่าน 3 นาที
-
ข่าวสารผลิตภัณฑ์
Android Studio Panda 4 พร้อมให้คุณใช้ในเวอร์ชันที่ใช้งานจริงแล้ว การเปิดตัวครั้งนี้มาพร้อมโหมดการวางแผน การคาดการณ์การแก้ไขครั้งถัดไป และอื่นๆ ซึ่งจะช่วยให้การสร้างแอป Android คุณภาพสูงง่ายกว่าที่เคย
Matt Dyor • ใช้เวลาอ่าน 5 นาที
-
ข่าวสารผลิตภัณฑ์
หากคุณเป็นนักพัฒนาแอป Android ที่ต้องการใช้ฟีเจอร์ AI ที่เป็นนวัตกรรมใหม่ในแอป เราได้เปิดตัวการอัปเดตใหม่ที่มีประสิทธิภาพไปเมื่อเร็วๆ นี้
Thomas Ezan • ใช้เวลาอ่าน 3 นาที
รับข่าวสาร
รับข้อมูลเชิงลึกด้านการพัฒนาแอป Android ล่าสุดส่งตรงถึงกล่องจดหมายของคุณทุกสัปดาห์