การย้อนกลับที่คาดการณ์ได้ ซึ่งเป็นฟีเจอร์การไปยังส่วนต่างๆ ด้วยท่าทางสัมผัสจะช่วยให้ผู้ใช้ดูตัวอย่างได้ว่าการปัดกลับจะนำผู้ใช้ไปที่ใด
ตัวอย่างเช่น การใช้ท่าทางสัมผัสย้อนกลับสามารถแสดงตัวอย่างภาพเคลื่อนไหวของหน้าจอหลักที่อยู่เบื้องหลังแอปของคุณได้ ดังที่แสดงในภาพจำลองในรูปที่ 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 ของเรา ซึ่งมีการติดตั้งใช้งานกรณีการใช้งานทั่วไปของ WebView ที่จัดการท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้โดยใช้ AndroidX Activity API
นอกจากนี้ คุณยังดูวิดีโอ Google I/O ซึ่งครอบคลุมตัวอย่างเพิ่มเติมของการติดตั้งใช้งาน AndroidX และ Platform 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 หรือคอมโพเนนต์การไปยังส่วนต่างๆ ให้อัปเกรดเป็น AndroidX Activity 1.6.0-alpha05 ขึ้นไปด้วย
อัปเดตแอปที่ใช้การนำทางย้อนกลับที่กำหนดเอง
หากแอปติดตั้งใช้งานลักษณะการทำงานย้อนกลับที่กำหนดเอง เส้นทางการย้ายข้อมูลจะแตกต่างกันไปตามว่าแอปใช้ AndroidX หรือไม่และจัดการการย้อนกลับไปยังส่วนต่างๆ อย่างไร
| วิธีที่แอปจัดการการนำทางย้อนกลับ | เส้นทางการย้ายข้อมูลที่แนะนำ (ลิงก์ในหน้านี้) |
| AndroidX API | ย้ายข้อมูลการติดตั้งใช้งานการย้อนกลับของ AndroidX ที่มีอยู่ |
| Platform API ที่ระบบไม่รองรับ | ย้ายข้อมูลแอป AndroidX ที่มี API การนำทางย้อนกลับที่ระบบไม่รองรับไปยัง AndroidX API |
ย้ายข้อมูลการติดตั้งใช้งานการย้อนกลับไปยังส่วนต่างๆ ของ AndroidX
กรณีการใช้งานนี้เป็นกรณีที่พบบ่อยที่สุด (และแนะนำมากที่สุด) ซึ่งใช้ได้กับแอปใหม่
หรือแอปที่มีอยู่ซึ่งติดตั้งใช้งานการจัดการการไปยังส่วนต่างๆ ด้วยท่าทางสัมผัสที่กำหนดเองด้วย
OnBackPressedDispatcher ตามที่อธิบายไว้ใน
หัวข้อการนำทางย้อนกลับที่กำหนดเอง
หากต้องการให้แน่ใจว่า API ที่ใช้ OnBackPressedDispatcher
(เช่น Fragment และคอมโพเนนต์การนำทาง) ทำงานร่วมกับ
ท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้ได้อย่างราบรื่น ให้อัปเกรดเป็น
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 การนำทางย้อนกลับที่ระบบไม่รองรับ คุณจะต้องย้ายข้อมูลไปใช้ AndroidX API เพื่อรองรับลักษณะการทำงานใหม่
วิธีย้ายข้อมูล 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"
เลือกไม่ใช้การย้อนกลับที่คาดการณ์ได้
หากต้องการเลือกไม่ใช้ ให้ตั้งค่าแฟล็ก
android:enableOnBackInvokedCallback เป็น false ในแท็ก <application> ใน AndroidManifest.xml
<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จะปิดภาพเคลื่อนไหวของการย้อนกลับที่คาดการณ์ได้ ไม่ว่าจะที่ระดับกิจกรรมหรือระดับแอป ทั้งนี้ขึ้นอยู่กับตำแหน่งที่คุณตั้งค่าแท็ก และสั่งให้ระบบไม่สนใจการเรียก Platform APIOnBackInvokedCallbackอย่างไรก็ตาม การเรียกOnBackPressedCallbackจะยังคงทำงานต่อไปเนื่องจากOnBackPressedCallbackเข้ากันได้แบบย้อนหลังและเรียก APIonBackPressedซึ่งระบบไม่รองรับใน Android เวอร์ชันก่อน Android 13 - การตั้งค่าแฟล็ก
enableOnBackInvokedCallbackที่ระดับแอปจะเป็นการกำหนดค่าเริ่มต้นสำหรับกิจกรรมทั้งหมดในแอป คุณสามารถลบล้างค่าเริ่มต้นต่อกิจกรรมได้โดยการตั้งค่าแฟล็กที่ระดับกิจกรรม ดังที่แสดงในตัวอย่างโค้ดก่อนหน้า
แนวทางปฏิบัติแนะนำสำหรับการเรียกกลับ
ต่อไปนี้เป็นแนวทางปฏิบัติแนะนำสำหรับการใช้การเรียกกลับการย้อนกลับของระบบที่รองรับ ได้แก่
PredictiveBackHandler หรือ BackHandler (สำหรับ Compose)
OnBackPressedCallback หรือ OnBackInvokedCallback
กำหนดสถานะ UI ที่เปิดและปิดใช้การเรียกกลับแต่ละรายการ
สถานะ UI เป็นพร็อพเพอร์ตี้ที่อธิบาย UI เราขอแนะนำให้ทำตามขั้นตอนระดับสูงต่อไปนี้
กำหนดสถานะ UI ที่เปิดและปิดใช้การเรียกกลับแต่ละรายการ
กำหนดสถานะดังกล่าวโดยใช้ประเภทตัวยึดข้อมูลที่ได้รับอนุญาตให้สังเกตพฤติกรรมผู้ใช้ได้ เช่น
StateFlowหรือ สถานะ Compose และเปิดหรือปิดใช้ Callback เมื่อสถานะเปลี่ยนแปลง
หากก่อนหน้านี้แอปของคุณเชื่อมโยงตรรกะการย้อนกลับกับคำสั่งแบบมีเงื่อนไข นี่อาจบ่งบอกว่าคุณกำลังตอบสนองต่อเหตุการณ์ย้อนกลับหลังจากที่เหตุการณ์เกิดขึ้นแล้ว หลีกเลี่ยงรูปแบบนี้ด้วยการเรียกกลับใหม่ หากเป็นไปได้ ให้ย้ายการเรียกกลับออกจากคำสั่งแบบมีเงื่อนไขและเชื่อมโยงการเรียกกลับกับประเภทตัวยึดข้อมูลที่สังเกตได้แทน
ใช้การเรียกกลับการย้อนกลับของระบบสำหรับตรรกะ 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 ซึ่งเป็นสัญญาณที่ดีที่สุดในการทราบว่าเมื่อใดที่ปลายทาง Compose ถูกนำออกจาก Back Stack และถูกทำลาย
สร้างการเรียกกลับที่มีความรับผิดชอบเดียว
คุณสามารถเพิ่มการเรียกกลับหลายรายการลงใน Dispatcher ได้ ระบบจะเพิ่มการเรียกกลับลงในสแต็กซึ่งการเรียกกลับที่เปิดใช้ล่าสุดจะจัดการท่าทางสัมผัสย้อนกลับถัดไป โดยมีการเรียกกลับ 1 รายการต่อท่าทางสัมผัสย้อนกลับ
การจัดการสถานะที่เปิดใช้ของการเรียกกลับจะง่ายขึ้นหากการเรียกกลับนั้นมีความรับผิดชอบเดียว ตัวอย่างเช่น
รูปที่ 2 แสดงวิธีที่คุณสามารถมีการเรียกกลับหลายรายการในสแต็ก ซึ่งแต่ละรายการมีความรับผิดชอบเดียว การเรียกกลับจะทำงานก็ต่อเมื่อการเรียกกลับที่อยู่ก่อนหน้าในสแต็กถูกปิดใช้ ในตัวอย่างนี้ การเรียกกลับ "คุณแน่ใจหรือไม่..." จะเปิดใช้เมื่อผู้ใช้ป้อนข้อมูลลงในแบบฟอร์ม และปิดใช้ในกรณีอื่นๆ การเรียกกลับจะเปิดกล่องโต้ตอบการยืนยันเมื่อผู้ใช้ปัดกลับเพื่อออกจากแบบฟอร์ม
การเรียกกลับอื่นๆ อาจรวมถึงคอมโพเนนต์ Material ที่รองรับการย้อนกลับที่คาดการณ์ได้ การเปลี่ยนภาพ AndroidX โดยใช้ Progress API หรือการเรียกกลับที่กำหนดเองอื่นๆ
ลักษณะการทำงานของสแต็กเดียวกันนี้ใช้ได้ใน Compose โดยที่อยู่ด้านในสุด
PredictiveBackHandler หรือ BackHandler จะมีลำดับความสำคัญสูงสุด
ในทำนองเดียวกัน การเรียกกลับของ childFragmentManager's จะทำงานหากการเรียกกลับก่อนหน้า
ถูก
ปิดใช้และ Back Stack สำหรับ FragmentManager นี้ไม่ว่างเปล่า ในตัวอย่างนี้ การเรียกกลับภายในนี้ถูกปิดใช้
เช่นเดียวกัน การเรียกกลับภายในของ supportFragmentManager จะทำงานหากการเรียกกลับก่อนหน้าถูกปิดใช้และสแต็กไม่ว่างเปล่า ในตัวอย่างนี้ การเรียกกลับนี้จะทำงานหากผู้ใช้ไม่ได้ป้อนข้อความลงในแบบฟอร์ม ซึ่งทำให้การเรียกกลับ "คุณแน่ใจหรือไม่..." ถูกปิดใช้
สุดท้าย ระบบจะจัดการท่าทางสัมผัสย้อนกลับหากการเรียกกลับก่อนหน้าถูกปิดใช้ หากต้องการทริกเกอร์ภาพเคลื่อนไหวของระบบ เช่น การกลับไปที่หน้าแรก การสลับกิจกรรม และการสลับแอป Back Stack ของ supportFragmentManager ต้องว่างเปล่าเพื่อให้การเรียกกลับภายในถูกปิดใช้
ทดสอบภาพเคลื่อนไหวของท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้
หากยังใช้ Android 13 หรือ Android 14 อยู่ คุณสามารถทดสอบภาพเคลื่อนไหวการกลับไปที่หน้าแรกที่แสดงในรูปที่ 1 ได้
หากต้องการทดสอบภาพเคลื่อนไหวนี้ ให้ทำตามขั้นตอนต่อไปนี้
ในอุปกรณ์ ให้ไปที่การตั้งค่า > ระบบ > ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์
เลือกภาพเคลื่อนไหวของการย้อนกลับที่คาดการณ์ได้
เปิดแอปที่อัปเดตแล้ว และใช้ท่าทางสัมผัสย้อนกลับเพื่อดูการทำงาน