การย้อนกลับที่คาดการณ์ได้ ซึ่งเป็นฟีเจอร์การไปยังส่วนต่างๆ ด้วยท่าทางสัมผัส ช่วยให้ผู้ใช้ดูตัวอย่างได้ว่าการปัดกลับจะนำผู้ใช้ไปที่ใด
ตัวอย่างเช่น การใช้ท่าทางสัมผัสสำหรับย้อนกลับจะแสดงตัวอย่างภาพเคลื่อนไหวของ หน้าจอหลักที่อยู่เบื้องหลังแอปของคุณ ดังที่แสดงในภาพจำลองในรูปที่ 1
ตั้งแต่ Android 15 เป็นต้นไป ตัวเลือกนักพัฒนาแอปสำหรับการเคลื่อนไหวของท่าทางสัมผัสย้อนกลับแบบคาดเดาจะไม่มีให้บริการอีกต่อไป ตอนนี้ภาพเคลื่อนไหวของระบบ เช่น กลับไปหน้าแรก ข้ามงาน และ ข้ามกิจกรรม จะปรากฏในแอปที่เลือกใช้ท่าทางสัมผัสย้อนกลับแบบคาดการณ์ ทั้งหมดหรือที่ระดับกิจกรรม
คุณทดสอบภาพเคลื่อนไหวกลับไปที่หน้าแรกนี้ได้ (ตามที่อธิบายไว้ในส่วนถัดไปของหน้านี้)
การรองรับท่าทางสัมผัสย้อนกลับแบบคาดการณ์ต้องมีการอัปเดตแอปโดยใช้
เข้ากันได้แบบย้อนหลัง
OnBackPressedCallback AppCompat 1.6.0-alpha05
(AndroidX) หรือ API ที่สูงกว่า หรือใช้ OnBackInvokedCallback
Platform API ใหม่ แอปส่วนใหญ่ใช้ AndroidX API ที่เข้ากันได้แบบย้อนหลัง
การอัปเดตนี้จะแสดงเส้นทางการย้ายข้อมูลเพื่อสกัดกั้นการนำทางย้อนกลับอย่างเหมาะสม
ซึ่งเกี่ยวข้องกับการแทนที่การสกัดกั้นการย้อนกลับจาก KeyEvent.KEYCODE_BACK
และคลาสใดๆ ที่มีเมธอด onBackPressed เช่น Activity และ
Dialog ด้วย Back API ใหม่ของระบบ
วิดีโอ Codelab และ Google I/O
นอกเหนือจากการใช้เอกสารประกอบในหน้านี้แล้ว ลองใช้ Codelab ของเรา โดยจะมีการติดตั้งใช้งาน Use Case ทั่วไปของ WebView ที่จัดการท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้โดยใช้ AndroidX Activity API
นอกจากนี้ คุณยังดูวิดีโอ Google I/O ซึ่งมีตัวอย่างเพิ่มเติมเกี่ยวกับการ ใช้ AndroidX และ API ของแพลตฟอร์มได้ด้วย
จัดการท่าทางสัมผัสย้อนกลับที่กำหนดเองใน Compose
Compose มีฟังก์ชันที่ประกอบกันได้ PredictiveBackHandler เพื่อจัดการท่าทางสัมผัสย้อนกลับที่กำหนดเอง API นี้ช่วยให้คุณตอบสนองต่อท่าทางสัมผัสย้อนกลับได้ และมีออบเจ็กต์
FlowของBackEventCompatที่คุณใช้เพื่อใช้ภาพเคลื่อนไหวหรือการเปลี่ยนฉากที่กำหนดเองได้
ขณะที่ผู้ใช้ปัด
PredictiveBackHandler(enabled = isBackHandlerEnabled) { progress: Flow<BackEventCompat> ->
try {
progress.collect { backEvent ->
// Update your UI or animation based on backEvent.progress
}
// Handle the final back action (e.g., navigate back)
} catch (e: CancellationException) {
// Back gesture was cancelled, reset your UI
}
}
หากต้องการสกัดกั้นท่าทางสัมผัสย้อนกลับโดยไม่ต้องติดตามความคืบหน้า ให้ใช้
BackHandler
อัปเดตแอปที่ใช้การนำทางย้อนกลับเริ่มต้น
ระบบจะเปิดใช้การคาดการณ์การย้อนกลับโดยค่าเริ่มต้น
หากแอปใช้ Fragment หรือ Navigation Component ให้อัปเกรดเป็น AndroidX Activity 1.6.0-alpha05 ขึ้นไปด้วย
อัปเดตแอปที่ใช้การนำทางย้อนกลับที่กำหนดเอง
หากแอปของคุณใช้ลักษณะการทำงานย้อนกลับที่กำหนดเอง จะมีเส้นทางการย้ายข้อมูลที่แตกต่างกัน ขึ้นอยู่กับว่าแอปใช้ AndroidX หรือไม่ และจัดการการนำทางย้อนกลับอย่างไร
| วิธีที่แอปจัดการการนำทางย้อนกลับ | เส้นทางการย้ายข้อมูลที่แนะนำ (ลิงก์ในหน้านี้) |
| AndroidX APIs | ย้ายข้อมูลการใช้งานการย้อนกลับของ AndroidX ที่มีอยู่ |
| API ของแพลตฟอร์มที่ไม่รองรับ | ย้ายข้อมูลแอป AndroidX ที่มี API การนำทางย้อนกลับที่ไม่รองรับไปยัง AndroidX API |
ย้ายข้อมูลการติดตั้งใช้งานการนำทางย้อนกลับของ AndroidX
กรณีการใช้งานนี้เป็นกรณีที่พบบ่อยที่สุด (และแนะนํามากที่สุด) โดยมีผลกับแอปใหม่
หรือแอปที่มีอยู่ซึ่งใช้การจัดการการไปยังส่วนต่างๆ ด้วยท่าทางสัมผัสที่กำหนดเองด้วย
OnBackPressedDispatcher ตามที่อธิบายไว้ใน
ระบุการไปยังส่วนต่างๆ ก่อนหน้าแบบกำหนดเอง
หากต้องการให้ API ที่ใช้ OnBackPressedDispatcher อยู่แล้ว
(เช่น Fragment และ Navigation Component) ทำงานร่วมกับ
ท่าทางสัมผัสย้อนกลับแบบคาดการณ์ได้อย่างราบรื่น ให้อัปเกรดเป็น AndroidX Activity 1.6.0-alpha05
```xml
// In your build.gradle file:
dependencies {
// Add this in addition to your other dependencies
implementation "androidx.activity:activity:1.6.0-alpha05"
```
ย้ายข้อมูลแอป AndroidX ที่มี API การนำทางย้อนกลับที่ไม่รองรับไปยัง AndroidX API
หากแอปใช้ไลบรารี AndroidX แต่ใช้หรืออ้างอิง API การนำทางย้อนกลับที่ไม่รองรับ คุณจะต้องย้ายข้อมูลไปใช้ API ของ AndroidX เพื่อรองรับลักษณะการทำงานใหม่
วิธีย้ายข้อมูล API ที่ไม่รองรับไปยัง AndroidX API
ย้ายตรรกะการจัดการการกลับของระบบไปยัง
OnBackPressedDispatcherของ AndroidX โดยใช้การติดตั้งใช้งานOnBackPressedCallbackดูคำแนะนำแบบละเอียดได้ที่ระบุการนำทางย้อนกลับที่กำหนดเองปิดใช้
OnBackPressedCallbackเมื่อพร้อมที่จะหยุดการสกัดกั้นท่าทางสัมผัสย้อนกลับหยุดการสกัดกั้นเหตุการณ์ย้อนกลับผ่าน
OnBackPressedหรือKeyEvent.KEYCODE_BACKโปรดอัปเกรดเป็น AndroidX Activity 1.6.0-alpha05
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
เลือกไม่ใช้การย้อนกลับที่คาดการณ์ได้
หากต้องการเลือกไม่ใช้ ให้ตั้งค่า Flag android:enableOnBackInvokedCallback เป็น false ใน AndroidManifest.xml ในแท็ก <application>
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
การตั้งค่านี้เป็น "เท็จ" จะมีผลดังนี้
- ปิดใช้ภาพเคลื่อนไหวของระบบสำหรับท่าทางสัมผัสย้อนกลับแบบคาดเดา
- ไม่สนใจ
OnBackInvokedCallbackแต่OnBackPressedCallbackจะยังใช้งานได้ ต่อไป
เลือกไม่ใช้ที่ระดับกิจกรรม
ฟีเจอร์android:enableOnBackInvokedCallbackช่วยให้คุณเลือกไม่ใช้ภาพเคลื่อนไหวของระบบแบบคาดการณ์
ที่ระดับกิจกรรมได้ ลักษณะการทำงานนี้ช่วยให้จัดการการย้ายข้อมูลแอปขนาดใหญ่ที่มีหลายกิจกรรมไปยังท่าทางสัมผัสย้อนกลับแบบคาดการณ์ได้ง่ายขึ้น
โค้ดต่อไปนี้แสดงตัวอย่างของ enableOnBackInvokedCallback ที่ตั้งค่าเป็น
เปิดใช้ภาพเคลื่อนไหวของระบบกลับไปที่หน้าแรกจาก MainActivity
<manifest ...>
<application . . .
android:enableOnBackInvokedCallback="false">
<activity
android:name=".MainActivity"
android:enableOnBackInvokedCallback="true"
...
</activity>
<activity
android:name=".SecondActivity"
android:enableOnBackInvokedCallback="false"
...
</activity>
</application>
</manifest>
โปรดคำนึงถึงข้อควรพิจารณาต่อไปนี้เมื่อใช้แฟล็ก
android:enableOnBackInvokedCallback
- การตั้งค่า
android:enableOnBackInvokedCallback=falseจะปิดภาพเคลื่อนไหวการย้อนกลับแบบคาดการณ์ที่ระดับกิจกรรมหรือระดับแอป ขึ้นอยู่กับว่าคุณตั้งค่าแท็กไว้ที่ใด และสั่งให้ระบบไม่สนใจการเรียกใช้OnBackInvokedCallbackAPI ของแพลตฟอร์ม อย่างไรก็ตาม การเรียกไปยังOnBackPressedCallbackจะยังคงทำงานต่อไปเนื่องจากOnBackPressedCallbackมี ความเข้ากันได้แบบย้อนหลังและเรียกใช้ APIonBackPressedซึ่งไม่รองรับ ใน Android เวอร์ชันก่อน 13 - การตั้งค่าแฟล็ก
enableOnBackInvokedCallbackที่ระดับแอปจะกำหนดค่าเริ่มต้นสำหรับกิจกรรมทั้งหมดในแอป คุณลบล้างค่าเริ่มต้นต่อกิจกรรมได้โดยการตั้งค่าแฟล็กที่ระดับกิจกรรม ดังที่แสดงในตัวอย่างโค้ดก่อนหน้า
แนวทางปฏิบัติแนะนำในการเรียกกลับ
แนวทางปฏิบัติแนะนำสำหรับการใช้การเรียกกลับของปุ่มย้อนกลับของระบบที่รองรับมีดังนี้
PredictiveBackHandler หรือ BackHandler (สำหรับ Compose)
OnBackPressedCallback หรือ OnBackInvokedCallback
กำหนดสถานะ UI ที่เปิดและปิดใช้ Callback แต่ละรายการ
สถานะ UI คือพร็อพเพอร์ตี้ที่อธิบาย UI เราขอแนะนำให้ทำตามขั้นตอนระดับสูงต่อไปนี้
กำหนดสถานะ UI ที่เปิดและปิดใช้การเรียกกลับแต่ละรายการ
กำหนดสถานะดังกล่าวโดยใช้ที่เก็บข้อมูลที่สังเกตได้ ประเภท เช่น
StateFlowหรือ สถานะ Compose แล้วเปิดหรือปิดใช้การเรียกกลับเมื่อสถานะเปลี่ยนแปลง
หากก่อนหน้านี้แอปของคุณเชื่อมโยงตรรกะย้อนกลับกับคำสั่งแบบมีเงื่อนไข การดำเนินการนี้อาจบ่งบอกว่าคุณกำลังตอบสนองต่อเหตุการณ์ย้อนกลับหลังจากที่ เกิดขึ้นแล้ว หลีกเลี่ยงรูปแบบนี้ด้วยการเรียกกลับที่ใหม่กว่า หากเป็นไปได้ ให้ย้ายการเรียกกลับออกนอกคำสั่งแบบมีเงื่อนไข แล้วเชื่อมโยงการเรียกกลับกับประเภทตัวยึดข้อมูลที่สังเกตได้แทน
ใช้การเรียกกลับของระบบสำหรับตรรกะ UI
ตรรกะของ UI กำหนดวิธีแสดง UI ใช้การเรียกกลับของระบบเพื่อเรียกใช้ตรรกะ UI เช่น การแสดงกล่องโต้ตอบหรือการเรียกใช้ภาพเคลื่อนไหว
หากแอปเปิดใช้ OnBackPressedCallback หรือ OnBackInvokedCallback
ที่มี PRIORITY_DEFAULT หรือ PRIORITY_OVERLAY ภาพเคลื่อนไหวการย้อนกลับที่คาดการณ์ได้
จะไม่ทำงานและคุณต้องจัดการเหตุการณ์ย้อนกลับ อย่าสร้างการเรียกกลับเหล่านี้เพื่อ
เรียกใช้ตรรกะทางธุรกิจหรือเพื่อบันทึก
ใช้วิธีต่อไปนี้หากแอปต้องเรียกใช้ตรรกะทางธุรกิจหรือบันทึกเมื่อผู้ใช้ปัดกลับ
- ใช้
OnBackInvokedCallbackกับPRIORITY_SYSTEM_NAVIGATION_OBSERVERในอุปกรณ์ที่ใช้ Android 16 ขึ้นไป ซึ่งจะสร้างการเรียกกลับของ Observer ที่ไม่ ใช้เหตุการณ์ย้อนกลับ เช่น คุณอาจลงทะเบียนการเรียกกลับนี้เมื่อผู้ใช้ปัดกลับจากกิจกรรมรูท หรือกล่าวอีกนัยหนึ่งคือเมื่อผู้ใช้ได้ออกจากแอปของคุณ ในกรณีนี้ คุณสามารถบันทึกเหตุการณ์ย้อนกลับหรือเรียกใช้ตรรกะทางธุรกิจอื่นๆ และภาพเคลื่อนไหวกลับไปที่หน้าแรกจะยังคงเล่นอยู่ - สำหรับกรณีจากกิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่งหรือจาก Fragment ไปยังกิจกรรม ให้บันทึกหาก
isFinishingภายในonDestroyเป็นtrueภายในวงจรของกิจกรรม - สำหรับกรณีจาก Fragment ไปยัง Fragment ให้บันทึกหาก
isRemovingภายในonDestroyเป็น จริงภายในวงจรของมุมมองของ Fragment หรือบันทึกโดยใช้วิธีonBackStackChangeStartedหรือonBackStackChangeCommittedภายในFragmentManager.OnBackStackChangedListener - สำหรับกรณี Compose ให้บันทึกภายใน
onCleared()การเรียกกลับของViewModelที่เชื่อมโยงกับปลายทาง Compose นี่คือสัญญาณที่ดีที่สุดในการทราบ เมื่อมีการนำปลายทางการเขียนออกจาก Back Stack และทำลาย
สร้างการเรียกกลับที่มีความรับผิดชอบเดียว
คุณเพิ่มการเรียกกลับหลายรายการไปยัง Dispatcher ได้ ระบบจะเพิ่มการเรียกกลับลงในสแต็ก ซึ่งการเรียกกลับที่เปิดใช้ที่เพิ่มล่าสุดจะจัดการท่าทางสัมผัสย้อนกลับถัดไป โดยมีการเรียกกลับ 1 รายการต่อท่าทางสัมผัสย้อนกลับ
การจัดการสถานะที่เปิดใช้ของ Callback จะง่ายขึ้นหาก Callback นั้นมี ความรับผิดชอบเดียว เช่น
รูปที่ 2 แสดงวิธีที่คุณสามารถมีฟังก์ชันเรียกกลับหลายรายการในสแต็ก โดยแต่ละฟังก์ชัน รับผิดชอบสิ่งหนึ่ง การเรียกกลับจะทำงานก็ต่อเมื่อมีการปิดใช้การเรียกกลับที่อยู่เหนือการเรียกกลับนั้น ในสแต็ก ในตัวอย่างนี้ ระบบจะเปิดใช้การเรียกกลับ "คุณแน่ใจไหม..." เมื่อผู้ใช้ป้อนข้อมูลลงในแบบฟอร์ม และปิดใช้ในกรณีอื่นๆ โดยการเรียกกลับจะเปิดกล่องโต้ตอบการยืนยันเมื่อผู้ใช้ปัดกลับเพื่อออกจาก แบบฟอร์ม
ส่วนการเรียกกลับอื่นๆ อาจมีคอมโพเนนต์ Material ที่รองรับการย้อนกลับแบบคาดการณ์, การเปลี่ยน AndroidX โดยใช้ Progress API หรือการเรียกกลับที่กำหนดเองอื่นๆ
ลักษณะการทำงานของสแต็กเดียวกันนี้จะใช้ใน Compose ด้วย โดย PredictiveBackHandler
หรือ BackHandler ที่อยู่ด้านในสุดจะมีความสำคัญเหนือกว่า
ในทำนองเดียวกัน ระบบจะเรียกใช้การเรียกกลับของ childFragmentManager หากปิดใช้การเรียกกลับข้างต้นและ Back Stack สำหรับ FragmentManager นี้ไม่ว่าง ใน
ตัวอย่างนี้ ระบบจะปิดใช้การเรียกกลับภายในนี้
ในทำนองเดียวกัน การเรียกกลับภายในของ supportFragmentManager จะทำงานหากปิดใช้การเรียกกลับข้างต้นและสแต็กไม่ว่าง ในตัวอย่างนี้
การเรียกกลับนี้จะทํางานหากผู้ใช้ไม่ได้ป้อนข้อความลงในแบบฟอร์ม ซึ่งทําให้
การเรียกกลับ "คุณแน่ใจไหม..." ถูกปิดใช้
สุดท้าย ระบบจะจัดการท่าทางสัมผัสย้อนกลับหากมีการปิดใช้การเรียกกลับข้างต้น
หากต้องการทริกเกอร์ภาพเคลื่อนไหวของระบบ เช่น กลับไปที่หน้าแรก
ข้ามกิจกรรม และข้ามงาน supportFragmentManagerต้องไม่มีสแต็กย้อนกลับ
เพื่อปิดใช้ Callback ภายใน
ทดสอบภาพเคลื่อนไหวของท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้
หากยังใช้ Android 13 หรือ Android 14 คุณสามารถทดสอบภาพเคลื่อนไหวกลับไปหน้าแรก ที่แสดงในรูปที่ 1 ได้
หากต้องการทดสอบภาพเคลื่อนไหวนี้ ให้ทำตามขั้นตอนต่อไปนี้
ในอุปกรณ์ ให้ไปที่การตั้งค่า > ระบบ > ตัวเลือกสำหรับนักพัฒนาแอป
เลือกภาพเคลื่อนไหวของการย้อนกลับที่คาดการณ์ได้
เปิดแอปที่อัปเดตแล้ว และใช้ท่าทางสัมผัสย้อนกลับเพื่อดูการทำงาน