简介
从 Android 13
(API level 33)开始,onBackPressed
已弃用,后退事件处理正在转向提前模型(ahead-of-time model),并且不应使用 Activity#onBackPressed()
和 KeyEvent#KEYCODE_BACK
来处理后退事件(后退手势或后退按钮的单击)。应使用 Activity#getOnBackInvokedDispatcher() .registerOnBackInvokedCallback(priority, callback)
注册 OnBackInvokedCallback
。
如果将应用程序更新到 API level 33,代码中会看到此错误:'onBackPressed(): Unit' is deprecated. Overrides deprecated member in 'androidx.core.app.ComponentActivity'. Deprecated in Java
如果无法使用 AndroidX 还提供了其他选项用于处理此功能:
- 对于无法使用 AndroidX 的应用 - 使用在 Android 13 中的 OnBackInvokedDispatcher 和 OnBackInvokedCallback 类,无需 AndroidX 即可使用这些 ahead-of-time API。如需了解详细信息,请参阅文档。
- 对于暂时无法迁移的应用 - 如果暂时无法迁移到 AndroidX 库或最新 API,可以选择停用预测性“返回”手势。如需了解详细信息,请参阅文档。
使用 AndroidX API 实现预测性返回手势
如需支持预测性返回手势,您需要使用 OnBackPressedCallback AppCompat 1.6.0-alpha05 (AndroidX) 或更高版本的 API,或使用新的 OnBackInvokedCallback API level 33 平台 API。
1. 在项目中添加所需的依赖项
dependencies {
// 添加 1.6.0-alpha05 或更高版本
implementation "androidx.activity:activity:1.6.0-alpha05"
2. 启用预测性“返回”手势
在 AndroidManifest.xml 中将 enableOnBackInvokedCallback
设置为 true
<application
...
android:enableOnBackInvokedCallback="true" // Enables this feature.
... >
...
</application>
3. 声明并注册 OnBackPressedCallback
来处理返回手势
-
处理
Activity
中的返回手势fun AppCompatActivity.onBackPressed(isEnabled: Boolean, callback: () -> Unit) { onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(isEnabled) { override fun handleOnBackPressed() { callback() } }) } class ExampleActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_example) onBackPressed(true) { // TODO } } }
-
处理
Fragment
中的返回手势fun FragmentActivity.onBackPressed(callback: () -> Unit) { onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { callback() } } ) } class ExampleFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) requireActivity().onBackPressed { // TODO } } }
4. 测试预测性返回手势动画
从 Android 13 最终版本开始,能够通过启用一个开发者选项来测试返回主屏幕动画。
- 打开 设置 > 系统 > 开发者选项。
- 选择预测性返回手势动画。
- 启动更新后的应用,然后执行返回手势,看看实际运行效果。
如果其他不清楚的地方参加官方文档和 Codlabs 示例:
https://developer.android.com/guide/navigation/predictive-back-gesture
https://codelabs.developers.google.com/handling-gesture-back-navigation